[Resolvido]Ajuda no codigo do Dijkstra em java

18 respostas
olivercld

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);
 	}
 
     }
 }

18 Respostas

B

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.

olivercld

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

B

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.

Anime

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!

E

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

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


olivercld

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

FacaNaCaveira

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

Anime

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

olivercld

@FacaNaCaveira nao entendi o codigo em java.

olivercld

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

Anime

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…

E

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).

olivercld

anime estou analisando a horas pesquisando ta dificil

luistiagos

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

Anime

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

Acho que lá está explicando bem…

E

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.

olivercld

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

olivercld

Problema resolvido

Criado 19 de outubro de 2010
Ultima resposta 20 de out. de 2010
Respostas 18
Participantes 6