public CaminhoModel ExecutarDijkstra(DijkstraModel input) { DijkstraUtil util = new DijkstraUtil(); GrafoModel grafo = util.MontaGrafo(null); Dijkstra dijkstra = new Dijkstra(grafo); // executa o algoritmo de Dijkstra dijkstra.Executa(grafo.Vertices[input.Origem]); // extrai o menor caminho List <VerticeModel> menorCaminho = dijkstra.BuscaCaminho(grafo.Vertices[input.Destino]); if (menorCaminho == null || menorCaminho.Count <= 0) { return(null); } //monta string para buscar a distancia do percurso string caminho = ""; foreach (VerticeModel vertice in menorCaminho) { caminho += "_" + vertice.ToString().Replace("Nodo_", ""); } grafo = util.MontaGrafo(caminho.Substring(1)); dijkstra = new Dijkstra(grafo); int distanciaPercurso = dijkstra.RetornaDistanciaTrajeto(); return(new CaminhoModel(menorCaminho, distanciaPercurso)); }
public static void main() { nodos = new List <VerticeModel>(); arestas = new List <ArestaModel>(); for (int i = 0; i < 8; i++) { VerticeModel location = new VerticeModel("Node_" + i, "Node_" + i); nodos.Add(location); } addLane("Edge_0", 0, 1, 5); addLane("Edge_1", 0, 3, 5); addLane("Edge_2", 0, 4, 7); addLane("Edge_3", 1, 2, 4); addLane("Edge_4", 2, 3, 8); addLane("Edge_5", 2, 4, 2); addLane("Edge_6", 3, 2, 8); addLane("Edge_7", 3, 4, 6); addLane("Edge_8", 4, 1, 3); // A distância da cidade A até a cidade B é 5. // A distância da cidade A até a cidade D é 5. // A distância da cidade A até a cidade E é 7. // A distância da cidade B até a cidade C é 4. // A distância da cidade C até a cidade D é 8. // A distância da cidade C até a cidade E é 2. // A distância da cidade D até a cidade C é 8. // A distância da cidade D até a cidade E é 6. // A distância da cidade E até a cidade B é 3. // Lets check from location Loc_1 to Loc_10 GrafoModel graph = new GrafoModel(nodos, arestas); Dijkstra dijkstra = new Dijkstra(graph); dijkstra.Executa(nodos[2]); List <VerticeModel> path = dijkstra.BuscaCaminho(nodos[2]); if (path == null || path.Count <= 0) { throw new System.Exception(); } foreach (VerticeModel vertex in path) { Console.WriteLine(vertex); } }