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)); }
/// <summary> /// Установить алгоритм /// </summary> /// <param name="algorithm">Алгоритм</param> public void SetAlgorithm(EShortestPathAlgorithm algorithm) { IShortestPathAlgorithm algorithmInstance = null; switch (algorithm) { case EShortestPathAlgorithm.Dijkstra: algorithmInstance = new DijkstraModel(); break; case EShortestPathAlgorithm.Floyd: algorithmInstance = new FloydModel(); break; default: throw new ArgumentException(); } m_cModel?.SetAlgorithm(algorithmInstance); }