Ajuda em DIJKSTRA

0 respostas
Y

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;
	}
Criado 28 de novembro de 2016
Respostas 0
Participantes 1