Cómo escribir una solución Bactrack de un problema

En los problemas de retroceso, generalmente desea crear una configuración que satisfaga algunas condiciones dadas (por ejemplo, N reinas, generar todas las permutaciones …). Backtrack funciona construyendo una configuración, paso a paso:

  • Divida el problema en N pasos, en cada paso agrega algo a la configuración.
  • En el primer paso:
    • Pruebe el 1er valor para el i-ésimo paso
    • Continúe con el paso i + 1, llamando a la misma función de retroceso, pero aumente el paso en 1
    • Ahora estamos de vuelta en el paso i, pero ya probamos todas las configuraciones posibles para el paso i + 1..N
    • Pruebe el segundo valor para el i-ésimo paso
    • Continúe con el paso i + 1, …
    • Volver al paso i otra vez

Veamos un ejemplo en el que desea generar todas las permutaciones de (1, 2, 3, 4):

  • En cada paso, agregará 1 número a la permutación actual

Detalles:

  • Paso 1:
    • Pruebe 1 → su configuración es [1, ???]
    • Continúe con el paso 2:
      • Prueba 2 → [1, 2, ??]
      • Continúe con el paso 3:
        • Prueba 3 → [1, 2, 3,?]
        • Continúe con el paso 4:
          • Prueba 4 → [1, 2, 3, 4]
        • De vuelta en el paso 3
        • Prueba 4 → [1, 2, 4,?]
        • Continúe con el paso 4:
          • Prueba 3 → [1, 2, 4, 3]
        • De vuelta en el paso 3
        • No hay más valor para probar, hecho
      • De vuelta en el paso 2
      • Prueba 3 → [1, 3, ??]
      • Continúe con el paso 3:
        • Prueba 2 → [1, 3, 2,?]
        • Continúe con el paso 4:
          • Prueba 4 → [1, 3, 2, 4]
        • De vuelta en el paso 3
        • Prueba 4 → [1, 3, 4,?]
        • Continúe con el paso 4:
          • Prueba 2 → [1, 3, 4, 2]
        • No hay más valor para probar, hecho
      • De vuelta en el paso 2
      • Prueba 4 → [1, 4, ??]
    • De vuelta en el paso 1
    • Prueba 2 → [2, ???]
    • Continúe con el paso 2:
      • Prueba 1 → [2, 1, ??]

1. No existe una solución de retroceso eficiente.
2. Bueno … esto probablemente no es lo que quieres escuchar, pero los primeros problemas de retroceso son los más sinceros.
3. Solo busque en Google algunos, resuélvalos, busque soluciones, etc., continúe y eventualmente los comprenderá.

Es probablemente uno de los pocos capítulos en programación competitiva que es extrañamente difícil de entender al principio, aunque es extremadamente fácil.