Este problema es similar a enumerar todas las expresiones correctamente emparejadas que contienen par ‘n’ de paréntesis.
Se puede resolver fácilmente usando recursividad y retroceso.
Aquí está mi solución para este problema:
//Computing all stack permutations for the range [1, rangeMax] void enumeratePermutationsAux(int rangeMax, int &pushCount, int &popCount) { static std::stack st; static std::vector output(rangeMax, 0); if(pushCount == rangeMax && popCount == rangeMax) { for(int i = 0; i < rangeMax; ++i) std::cout << output[i] << ' '; std::cout<<"\n"; } else { if(pushCount popCount) { int tmp = st.top(); output[popCount] = tmp; st.pop(); popCount ++; enumeratePermutationsAux(rangeMax, pushCount, popCount); st.push(tmp); popCount --; } } } void enumeratePermutations(int rangeMax) { int pushCount = 0, popCount = 0; enumeratePermutationsAux(rangeMax, pushCount, popCount); }
- ¿Cómo funciona este algoritmo para encontrar los bordes del corte mínimo de un gráfico?
- Quiero escribir un código que reproduzca 10 segundos de audio, luego pause durante 15 segundos y luego reproduzca los siguientes 10 segundos, etc. ¿Cómo lo haría?
- ¿Pueden los algoritmos predecir el futuro?
- ¿Podemos encontrar si la matriz no contiene un elemento mayoritario en un tiempo casi constante?
- ¿Qué estructura de datos usaría para diseñar un programa de planificación de producción?