[Resolvido]Ajuda no codigo do Dijkstra em java

galera preciso da ajuda de voçes o codigo ta rodando, so o que eu tenho que entender explicar o codigo em sala e um trabalho do algoritmo de dijkstra alguempde me ajudar a entender cada classe o que ela faz o que a linha faz, estou quebrando a cabeça e sozinho eu nao to conseguindo entender o codigo todo terei de explicar. desde ja fico grato.



 

class Vertex implements Comparable<Vertex>
 {
     public final String name;
     public Edge[] adjacencies;
     public double minDistance = Double.POSITIVE_INFINITY;
     public Vertex previous;
     public Vertex(String argName) { name = argName; }
     public String toString() { return name; }
     public int compareTo(Vertex other)
     {
         return Double.compare(minDistance, other.minDistance);
     }
 
 }
 
 
 
     public static List<Vertex> getShortestPathTo(Vertex target)
     {
         List<Vertex> path = new ArrayList<Vertex>();
         for (Vertex vertex = target; vertex != null; vertex = vertex.previous)
             path.add(vertex);
 
         Collections.reverse(path);
         return path;
     }
 
  public static void main(String[] args)
     {
        Vertex v0 = new Vertex("Harrisburg");
 	Vertex v1 = new Vertex("Baltimore");
 	Vertex v2 = new Vertex("Washington");
 	Vertex v3 = new Vertex("Philadelphia");
 	Vertex v4 = new Vertex("Binghamton");
 	Vertex v5 = new Vertex("Allentown");
 	Vertex v6 = new Vertex("New York");
 	v0.adjacencies = new Edge[]{ new Edge(v1,  79.83),
 	                             new Edge(v5,  81.15) };
 	v1.adjacencies = new Edge[]{ new Edge(v0,  79.75),
 	                             new Edge(v2,  39.42),
 	                             new Edge(v3, 103.00) };
	v2.adjacencies = new Edge[]{ new Edge(v1,  38.65) };
 	v3.adjacencies = new Edge[]{ new Edge(v1, 102.53),
 	                             new Edge(v5,  61.44),
 	                             new Edge(v6,  96.79) };
 	v4.adjacencies = new Edge[]{ new Edge(v5, 133.04) };
 	v5.adjacencies = new Edge[]{ new Edge(v0,  81.77),
 	                             new Edge(v3,  62.05),
 	                             new Edge(v4, 134.47),
 	                             new Edge(v6,  91.63) };
 	v6.adjacencies = new Edge[]{ new Edge(v3,  97.24),
 	                             new Edge(v5,  87.94) };
 	Vertex[] vertices = { v0, v1, v2, v3, v4, v5, v6 };
 
 
         computePaths(v0);
         for (Vertex v : vertices)
 	{
 	    System.out.println("Distance to " + v + ": " + v.minDistance);
 	    List<Vertex> path = getShortestPathTo(v);
 	    System.out.println("Path: " + path);
 	}
 
     }
 }

Ora, como é um trabalho de escola, você precisa:
a) Pegar o algoritmo de Dijkstra que foi implementado nessa classe que você chupou de algum lugar;
b) Tentar bater cada linha do algoritmo com o que está nessa classe.

Se você chupou o programa, pelo menos podia conseguir bater com o algoritmo, que deve estar na sua apostila, ou talvez na Wikipedia.

estou aprendendo java so queria entender se ajudar fico grato se nao obrigado do mesmo jeito e apenas pra mim entender tem coisas que eu nao sei esto a dias tentando e nao to entendendo. nao peguei nada de apostila nao tem nada de wikipedia. so quero entender o codigo

Acho que a coisa mais importante é você criar uma forma de tentar entender o código. Primeira coisa: você já fez um desenho do grafo que está nesse programa? Isso já vai lhe ajudar bastante, por incrível que pareça.

Oi olivercld ,

Talvez ajude http://pt.wikipedia.org/wiki/Algoritmo_de_Dijkstra

http://www.inf.ufsc.br/grafos/temas/custo-minimo/dijkstra.html

Pesquise e estude amigo… :wink:

Boa sorte!

De qualquer maneira, o seu exemplo forneceu a seguinte figura:

Acho que ela vai ajudar a você entender o programa.


entanglement Anime bezier curve Obrigado a todos voçes e obrigadao entanglement nao sabe o sufoco e deseespero ta chegando a hora de apresentar este trabalho de I.A, (inteligência artificial), to estudando aqui a dias que venho tentando e tentando pedi explicaçao ao prof: mais mesmo assim to aqui nervoso desesperado rs porque o negosio nao efacil. mais uma vez obrigaduuuuu

Fala ai olivercld,
vc entendeu a logica do problema ou apenas na entendeu o codigo em java???

Não precisa me agradecer,não fiz nada…afff isso é bem complicado mesmo rsrs… :wink:

@FacaNaCaveira nao entendi o codigo em java.

FacaNaCaveira nao entendi o codigo em java algumas importaçao la as classes

ahh…não é dificil não,estava com preguiça de analisar…se vc prestar atenção é facil,mas não sei como explicar,é como se fosse um caminho em um fluxograma ou diagrama,vai passando e somando a distância…Se eu estiver errada,por favor me corrijam…

Seu olivercld, é interessante você pelo menos olhar o javadoc da classe PriorityQueue. Essa classe já implementa uma boa parte do algoritmo que você pode achar, por exemplo, na Wikipedia, por isso é que você não está conseguindo bater o algoritmo com o programa que você pegou.

http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html

E se tiver problema com a língua inglesa, favor usar o Google Translator:

http://www.google.com.br/language_tools?hl=pt-BR

Se você puser uma URL, ele traduz a página inteira. (Se você vai conseguir entender ou não são outros 500).

anime estou analisando a horas pesquisando ta dificil

uma dica entenda primeiro o algoritimo… depois a implementação…

Leia o link que eu já passei http://www.inf.ufsc.br/grafos/temas/custo-minimo/dijkstra.html

Acho que lá está explicando bem…

Ajuda também você pegar a figura que foi postada, e tentar calcular (na mão - o que você tem contra o papel e lápis?)
o caminho mínimo de Harrisburg (o vértice v0) aos outros vértices do grafo, usando o algoritmo tal como a Anime indicou nos links.

gente e o que eu estou fazendo estudando o codigo,nao precisa de bronca eu sou iniciante estou apenas fazendo um trabalho ainda falta muito aprender

Problema resolvido