Skip to content

Commit da0c483

Browse files
authored
Merge pull request #113 from AndersonSheep/patch-1
Criado o algoritimo de Dijkstra em java
2 parents bd843f9 + e904731 commit da0c483

File tree

2 files changed

+102
-1
lines changed

2 files changed

+102
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Com o objetivo de alcançar uma abrangência maior e encorajar novas pessoas a c
66

77
| Algoritmos | C | C++ | Java | Python | Go | Ruby | JS | Pascal | Swift | Rust |
88
| ------------------------------- | --------------------------------------- | ----------------------------------------- | ---------------------------------------------- | ---------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------- | ------------------------------------------ | -------------------------------------------- | ---------------------------------------------- |
9-
| [Algoritmo Dijkstra][1] | [C](./src/c/AlgoritmoDijkstra.c) | C++ | Java | [Python](./src/python/dijkstra.py) | [Go](./src/go/dijkstra/dijkstra.go) | Ruby | [JS](src/javascript/AlgoritmoDijkstra.js) | Pascal | Swift | Rust |
9+
| [Algoritmo Dijkstra][1] | [C](./src/c/AlgoritmoDijkstra.c) | C++ | [Java](./src/java/Dijkstra.java) | [Python](./src/python/dijkstra.py) | [Go](./src/go/dijkstra/dijkstra.go) | Ruby | [JS](src/javascript/AlgoritmoDijkstra.js) | Pascal | Swift | Rust |
1010
| [Algoritmo Floyd Warshall][2] | [C](./src/c/AlgoritmoFloydWarshall.c) | C++ | Java | Python | Go | Ruby | JS | Pascal | Swift | Rust |
1111
| [Busca Binária][5] | C | [C++](./src/cpp/BinarySearch.cpp) | Java | [Python](./src/python/busca_binaria.py) | [Go](./src/go/busca_binaria/busca_binaria.go) | [Ruby](./src/ruby/BuscaBinaria.rb) | [JS](./src/javascript/BinarySearch.js) | [Pascal](./src/pascal/busca-binaria.pas) | Swift | Rust |
1212
| [Busca em Grafos][6] | [C](./src/c/BuscaEmGrafo.c) | C++ | Java | [Python](./src/python/busca_em_grafo.py) | Go | Ruby | [JS](./src/javascript/GraphSearch.js) | Pascal | Swift | Rust |

src/java/Dijkstra.java

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

0 commit comments

Comments
 (0)