private Puzzle encontrarMelhNodo() { Puzzle melhor; Puzzle test; if (lista.size() == 0) { melhor = (Puzzle) usados.elementAt(0); } else { melhor = (Puzzle) lista.elementAt(0); } for (int i = 1; i < lista.size(); i++) { test = (Puzzle) lista.get(i); int melhorHeu = melhor.getPerfundidade() + melhor.getHeuCurt(); int tempHeu = test.getPerfundidade() + test.getHeuCurt(); // quanto mais pequeno melhor if (tempHeu < melhorHeu) { melhor = test; } } return melhor; }
private boolean expandiNos(Puzzle p) { int[] test; Puzzle temp; lista.remove(p); int parentID = usados.size(); usados.add(p); // se heuristica = 0, esta no obejectivo if (p.getHeuCurt() == 0) { return false; } test = p.cima(); temp = new Puzzle(test, p.eCurto(), p.getPerfundidade(), parentID); adicinarLista(temp); test = p.baixo(); temp = new Puzzle(test, p.eCurto(), p.getPerfundidade(), parentID); adicinarLista(temp); test = p.esquerda(); temp = new Puzzle(test, p.eCurto(), p.getPerfundidade(), parentID); adicinarLista(temp); test = p.direita(); temp = new Puzzle(test, p.eCurto(), p.getPerfundidade(), parentID); adicinarLista(temp); return true; }