Skip to content

Commit e17c3ae

Browse files
Criado o algoritimo de Dijkstra em java
1 parent bd843f9 commit e17c3ae

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

src/java/dijkstra.java

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
// Algoritimo de Dijkstra
2+
// Anderson Carneiro da Silva
3+
// https://github.com/AndersonSheep
4+
5+
6+
// Baseado no método do GeekforGeeks
7+
// Um programa Java para o algoritmo de caminho mais curto de fonte única de Dijkstra.
8+
// O programa é para representação da matriz de adjacência do grafo
9+
import java.util.*;
10+
import java.lang.*;
11+
import java.io.*;
12+
13+
class ShortestPath {
14+
// Uma função de utilidade para encontrar o vértice com valor mínimo de distância,
15+
// do conjunto de vértices ainda não incluídos na árvore do caminho mais curto
16+
static final int V = 9;
17+
int minDistance(int dist[], Boolean sptSet[])
18+
{
19+
// Iniciando um valor minimo
20+
int min = Integer.MAX_VALUE, min_index = -1;
21+
22+
for (int v = 0; v < V; v++)
23+
if (sptSet[v] == false && dist[v] <= min) {
24+
min = dist[v];
25+
min_index = v;
26+
}
27+
28+
return min_index;
29+
}
30+
31+
// Uma função de utilidade para imprimir a matriz de distância construída
32+
void printSolution(int dist[])
33+
{
34+
System.out.println("Vertex \t\t Distance from Source");
35+
for (int i = 0; i < V; i++)
36+
System.out.println(i + " \t\t " + dist[i]);
37+
}
38+
39+
// Função que implementa o caminho mais curto da fonte única de Dijkstra
40+
// algoritmo para um grafo representado usando matriz de adjacência
41+
// representação
42+
void dijkstra(int graph[][], int src)
43+
{
44+
int dist[] = new int[V]; // A matriz de saída. dist [i] irá manter
45+
// a menor distância de src a i
46+
47+
// sptSet [i] será verdadeiro se o vértice i for incluído no mais curto
48+
// árvore do caminho ou distância mais curta de src para i é finalizada
49+
Boolean sptSet[] = new Boolean[V];
50+
51+
// Inicializa todas as distâncias como INFINITE e stpSet [] como falso
52+
for (int i = 0; i < V; i++) {
53+
dist[i] = Integer.MAX_VALUE;
54+
sptSet[i] = false;
55+
}
56+
57+
// A distância do vértice de origem é sempre 0
58+
dist[src] = 0;
59+
60+
// Encontre o caminho mais curto para todos os vértices
61+
for (int count = 0; count < V - 1; count++) {
62+
// Escolha o vértice de distância mínima do conjunto de vértices
63+
// ainda não processado. vc é sempre igual a src em primeiro
64+
// iteração.
65+
int u = minDistance(dist, sptSet);
66+
67+
// Marque o vértice escolhido como processado
68+
sptSet[u] = true;
69+
70+
// Atualize o valor dist dos vértices adjacentes do
71+
// vértice escolhido.
72+
for (int v = 0; v < V; v++)
73+
74+
// Atualize dist [v] apenas se não estiver em sptSet, há um
75+
// borda de u a v, e peso total do caminho de src a
76+
// v a u é menor que o valor atual de dist [v]
77+
if (!sptSet[v] && graph[u][v] != 0 && dist[u] != Integer.MAX_VALUE && dist[u] + graph[u][v] < dist[v])
78+
dist[v] = dist[u] + graph[u][v];
79+
}
80+
81+
// imprime a matriz de distância construída
82+
printSolution(dist);
83+
}
84+
85+
// Método do Driver
86+
public static void main(String[] args)
87+
{
88+
/* Vamos criar o gráfico de exemplo discutido acima */
89+
int graph[][] = new int[][] { { 0, 4, 0, 0, 0, 0, 0, 8, 0 },
90+
{ 4, 0, 8, 0, 0, 0, 0, 11, 0 },
91+
{ 0, 8, 0, 7, 0, 4, 0, 0, 2 },
92+
{ 0, 0, 7, 0, 9, 14, 0, 0, 0 },
93+
{ 0, 0, 0, 9, 0, 10, 0, 0, 0 },
94+
{ 0, 0, 4, 14, 10, 0, 2, 0, 0 },
95+
{ 0, 0, 0, 0, 0, 2, 0, 1, 6 },
96+
{ 8, 11, 0, 0, 0, 0, 1, 0, 7 },
97+
{ 0, 0, 2, 0, 0, 0, 6, 7, 0 } };
98+
ShortestPath t = new ShortestPath();
99+
t.dijkstra(graph, 0);
100+
}
101+
}

0 commit comments

Comments
 (0)