Este é um projeto pessoal que implementa uma estrutura de grafo simplificada e o algoritmo de Dijkstra em Java.
src/com/max/
: Pacote contendo as classes relacionadas ao grafo e ao algoritmo de Dijkstra.Graph.java
: Implementação de uma estrutura de grafo ponderado.Children.java
: Representação da lista de filhos de um nó no grafo.Dijkstra.java
: Implementação do algoritmo de Dijkstra para encontrar o caminho mais curto em um grafo ponderado.
Certifique-se de ter o Java instalado em sua máquina. Caso contrário, você pode baixá-lo aqui.
Compile e execute o código Java. Exemplo de uso do algoritmo de Dijkstra:
Graph grafo = new Graph(6);
Children childLivro = new Children(new String[]{"poster", "lp raro"},
new double[]{0.0, 5.0});
Children childPoster = new Children(new String[]{"bateria", "baixo"},
new double[]{35.0, 30.0});
Children childLpRaro = new Children(new String[]{"bateria", "baixo"},
new double[]{20.0, 15.0});
Children childBateria = new Children(new String[]{"piano"},
new double[]{10.0});
Children childBaixo = new Children(new String[]{"piano"},
new double[]{20.0});
grafo.addNode("livro", childLivro);
grafo.addNode("poster", childPoster);
grafo.addNode("lp raro", childLpRaro);
grafo.addNode("bateria", childBateria);
grafo.addNode("baixo", childBaixo);
grafo.addNode("piano", null);
Dijkstra d = new Dijkstra();
d.runDijkstra(grafo, "piano");
O código acima está no arquivo main.java dentro da pasta src
, teste sua funcionalidade! O grafo de exemplo foi retirado do livro "Entendendo Algoritmos".
Output:
Shorter path: livro - lp raro - bateria - piano
Final cost: 35.0
A classe Graph representa um grafo ponderado. Você pode adicionar nós usando addNode e especificar seus filhos por meio da classe Children. O método graphVisualiser fornece uma visualização simples do grafo.
A classe Dijkstra implementa o algoritmo de Dijkstra. Use o método runDijkstra para encontrar o caminho mais curto em seu grafo.
Contribuições são bem-vindas! Sinta-se à vontade para abrir problemas ou enviar pull requests.
Este projeto é licenciado sob a MIT License.