Skip to content

Commit aeddc9a

Browse files
author
Kelvin S. do Prado
committed
Add Dijkstra (Java) ao README.md
1 parent e17c3ae commit aeddc9a

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