Retrocesso (Backtracking).
Avançar, testar a restrição e desfazer cedo quando o caminho não pode funcionar.
Esta escolha ainda pode fazer parte de uma solução válida?
escolher um ramo
saiba quando voltar.
A busca começa com uma possibilidade. Ainda não sabemos se ela levará à resposta, então registramos o ponto de decisão.
princípio /
Explorar sistematicamente, abandonar estados inválidos e retornar ao ponto de decisão anterior.
limite que não pode ser omitido
A poda evita ramos inúteis, mas não transforma automaticamente um espaço exponencial em polinomial. O tamanho da busca continua sendo parte da resposta.
b é o número médio de escolhas por nível e d é a profundidade máxima da árvore de busca.
Um retorno, um caminho.
O destaque acompanha a decisão atual. Leia o pseudocódigo antes de trocar de linguagem; a implementação é uma tradução, não um novo algoritmo.
01function search(state) {02 if (isComplete(state)) return state;03 for (const choice of choices(state)) {04 apply(state, choice);05 if (isValid(state)) {06 const result = search(state);07 if (result) return result;08 }09 undo(state, choice);10 }11 return null;12}