La generación de secuencias de corchetes correctas se deriva directamente de la forma en que se realiza la verificación: solo necesitamos agregar nuevos corchetes sin violar la corrección. Esto se hace por iteración recursiva. Si no lo conoces - BE... ah, no, puedes tratar de entender leyendo más. Este es un ejemplo de código para un tipo de paréntesis:
#incluir <vector>
#incluye <iostream>
utilizando espacio de nombres std;
intn; // Media longitud
vector<char> respuesta; // Nuestra respuesta
void rec(int balance) {
if (ans.size() == 2 * n) { // Si es así, entonces estamos hecho < /span>
para (int i = 0; i < 2 * n; i++)
cout << y[yo] << " ";
cout << "\n";
}
si (ans.size() + balance + 2 <= n * 2) { // Comprueba, nosotros Lo haremos, cerramos la nueva llave de apertura
// Ahora ten cuidado: no necesitamos hacer un vector separado para cada secuencia
respuesta.push_back('(');
rec(saldo + 1);
respuesta.pop_back(); // Para comprender esto, debe conocer la recursividad. Primero, agregamos un paréntesis al vector y luego ejecutamos todo este código nuevamente.
// Es decir, agregar un paréntesis nuevamente, si podemos.
// Y esto sucederá hasta que empecemos a salir de la recursividad, es decir, hasta que alcancemos la longitud deseada.
// Entonces se empezarán a quitar los corchetes. Si entiendes esto, te felicito, eres increíble.
}
si (saldo > 0) { // Si podemos cerrar un paréntesis, lo cerramos.
respuesta.push_back(')');
rec(saldo - 1);
respuesta.pop_back();
}
}
int principal()
{
cin>> norte;
rec(0);
return 0;
}
Y ahora el momento de las dificultades: ¡tendrá que escribir el algoritmo para varios tipos de corchetes USTED MISMO! Muahahahahahahahahahahahaha!