private static void backtracking(Stack<Movimento> movimentos, Tabuleiro tabuleiro) { if (eSol(tabuleiro)) { imprimirTab(tabuleiro.obterEstado()); processarSol(movimentos); } else { Queue<Movimento> cand = gerarCand(tabuleiro); while (!cand.isEmpty()) { Movimento mv = cand.poll(); movimentos.push(mv); tabuleiro.aplicarMov(mv); backtracking(movimentos, tabuleiro); tabuleiro.desaplicarMov(mv); movimentos.pop(); } } }
public static void main(String[] args) { backtracking(new Stack(), Tabuleiro.obterInstancia()); }
private static Queue<Movimento> gerarCand(Tabuleiro tabuleiro) { Queue<Movimento> cand = tabuleiro.movimentosPossiveis(); return cand; }
private static boolean eSol(Tabuleiro tabuleiro) { return tabuleiro.contarUns() == 1; }