Galera, segue meu codigo de dijkstra, em algumas ocasiões ele funciona, em outros não, poderia me ajudar ? ai vai uma ocasião que ele não funciona, inserido vertices, 1, 2, 3, e arestas, do 1 pro 2 com peso 5, outra do 2 pro 3 com peso, e outra do 1 pro 3, com peso 1.
Segue o código
public String[] dijkstra(Vertice origem, Vertice destino) {
boolean p = true;
String caminhos[] = new String[this.contListVertice + 1];
for (int i = 0; i < this.contListVertice; i++) {
this.listVertice[i].setDistancia(Integer.MAX_VALUE);
this.listVertice[i].setVisitado(false);
}
origem.setDistancia(0);
PriorityQueue<Vertice> pq = new PriorityQueue<Vertice>();
pq.add(origem);
for (int i = 0; !pq.isEmpty();) {
Vertice u = pq.poll();
if (u.isVisitado() == false) {
if(p) caminhos[i++] = u.getValor();
if(u == destino) p = false;
u.setVisitado(true);
for (int j = 0; j < this.contListAresta; j++) {
if (this.listAresta[j].getOrigem() == u) {
Vertice v = this.listAresta[j].getDestino();
int peso = this.listAresta[j].getPeso();
if (v.getDistancia() > (u.getDistancia() + peso)) {
v.setDistancia(u.getDistancia() + peso);
pq.add(v);
}
}
}
}
}
caminhos[caminhos.length - 1] = String.valueOf(destino.getDistancia());
return p ? null: caminhos;
}