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