Skip to content

Commit 095d9dc

Browse files
committed
Parte com interface gráfica funcionando. Implementado uma modificação do algoritmo de Dijkstra.
1 parent c3f2ccb commit 095d9dc

File tree

12 files changed

+755
-0
lines changed

12 files changed

+755
-0
lines changed

.classpath

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="src" path="src"/>
4+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
5+
<classpathentry kind="lib" path="lib/jgraph.jar"/>
6+
<classpathentry kind="lib" path="lib/jgrapht-jdk1.6.jar"/>
7+
<classpathentry kind="output" path="bin"/>
8+
</classpath>

.project

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>TrabalhoCarlos</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
</buildSpec>
14+
<natures>
15+
<nature>org.eclipse.jdt.core.javanature</nature>
16+
</natures>
17+
</projectDescription>

lib/jgraph.jar

153 KB
Binary file not shown.

lib/jgrapht-jdk1.6.jar

234 KB
Binary file not shown.

src/Aresta.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
public class Aresta {
2+
3+
private int peso;
4+
private Vertice origem;
5+
private Vertice destino;
6+
7+
public Aresta(Vertice v1, Vertice v2) {
8+
9+
this.peso = 1;
10+
this.origem = v1;
11+
this.destino = v2;
12+
13+
}
14+
15+
public void setPeso(int novoPeso) {
16+
17+
this.peso = novoPeso;
18+
}
19+
20+
public int getPeso() {
21+
22+
return peso;
23+
}
24+
25+
public void setDestino(Vertice destino) {
26+
this.destino = destino;
27+
}
28+
29+
public Vertice getDestino() {
30+
return destino;
31+
}
32+
33+
public void setOrigem(Vertice origem) {
34+
this.origem = origem;
35+
}
36+
37+
public Vertice getOrigem() {
38+
return origem;
39+
}
40+
41+
}

src/Dijkstra.java

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
import java.util.ArrayList;
2+
import java.util.Collections;
3+
import java.util.List;
4+
5+
public class Dijkstra {
6+
7+
// Atributos usados na funcao encontrarMenorCaminho
8+
9+
// Lista que guarda os vertices pertencentes ao menor caminho encontrado
10+
List<Vertice> menorCaminho = new ArrayList<Vertice>();
11+
12+
// Variavel que recebe os vertices pertencentes ao menor caminho
13+
Vertice verticeCaminho = new Vertice();
14+
15+
// Variavel que guarda o vertice que esta sendo visitado
16+
Vertice atual = new Vertice();
17+
18+
// Variavel que marca o vizinho do vertice atualmente visitado
19+
Vertice vizinho = new Vertice();
20+
21+
// Lista dos vertices que ainda nao foram visitados
22+
List<Vertice> naoVisitados = new ArrayList<Vertice>();
23+
24+
// Algoritmo de Dijkstra
25+
public List<Vertice> encontrarMenorCaminhoDijkstra(Grafo grafo, Vertice v1,
26+
Vertice v2) {
27+
28+
// Adiciona a origem na lista do menor caminho
29+
menorCaminho.add(v1);
30+
31+
// Colocando a distancias iniciais
32+
for (int i = 0; i < grafo.getVertices().size(); i++) {
33+
34+
// Vertice atual tem distancia zero, e todos os outros,
35+
// 9999("infinita")
36+
if (grafo.getVertices().get(i).getDescricao()
37+
.equals(v1.getDescricao())) {
38+
39+
grafo.getVertices().get(i).setDistancia(0);
40+
41+
} else {
42+
43+
grafo.getVertices().get(i).setDistancia(9999);
44+
45+
}
46+
// Insere o vertice na lista de vertices nao visitados
47+
this.naoVisitados.add(grafo.getVertices().get(i));
48+
}
49+
50+
Collections.sort(naoVisitados);
51+
52+
// O algoritmo continua ate que todos os vertices sejam visitados
53+
while (!this.naoVisitados.isEmpty()) {
54+
55+
// Toma-se sempre o vertice com menor distancia, que eh o primeiro
56+
// da
57+
// lista
58+
59+
atual = this.naoVisitados.get(0);
60+
System.out.println("Pegou esse vertice: " + atual);
61+
/*
62+
* Para cada vizinho (cada aresta), calcula-se a sua possivel
63+
* distancia, somando a distancia do vertice atual com a da aresta
64+
* correspondente. Se essa distancia for menor que a distancia do
65+
* vizinho, esta eh atualizada.
66+
*/
67+
for (int i = 0; i < atual.getArestas().size(); i++) {
68+
69+
vizinho = atual.getArestas().get(i).getDestino();
70+
System.out.println("Olhando o vizinho de " + atual + ": "
71+
+ vizinho);
72+
if (!vizinho.verificarVisita()) {
73+
74+
// Comparando a distância do vizinho com a possível
75+
// distância
76+
if (vizinho.getDistancia() > (atual.getDistancia() + atual
77+
.getArestas().get(i).getPeso())) {
78+
79+
vizinho.setDistancia(atual.getDistancia()
80+
+ atual.getArestas().get(i).getPeso());
81+
vizinho.setPai(atual);
82+
83+
/*
84+
* Se o vizinho eh o vertice procurado, e foi feita uma
85+
* mudanca na distancia, a lista com o menor caminho
86+
* anterior eh apagada, pois existe um caminho menor
87+
* vertices pais, ateh o vertice origem.
88+
*/
89+
if (vizinho == v2) {
90+
menorCaminho.clear();
91+
verticeCaminho = vizinho;
92+
menorCaminho.add(vizinho);
93+
while (verticeCaminho.getPai() != null) {
94+
95+
menorCaminho.add(verticeCaminho.getPai());
96+
verticeCaminho = verticeCaminho.getPai();
97+
98+
}
99+
// Ordena a lista do menor caminho, para que ele
100+
// seja exibido da origem ao destino.
101+
Collections.sort(menorCaminho);
102+
103+
}
104+
}
105+
}
106+
107+
}
108+
// Marca o vertice atual como visitado e o retira da lista de nao
109+
// visitados
110+
atual.visitar();
111+
this.naoVisitados.remove(atual);
112+
/*
113+
* Ordena a lista, para que o vertice com menor distancia fique na
114+
* primeira posicao
115+
*/
116+
117+
Collections.sort(naoVisitados);
118+
System.out.println("Nao foram visitados ainda:"+naoVisitados);
119+
120+
}
121+
122+
return menorCaminho;
123+
}
124+
125+
}

0 commit comments

Comments
 (0)