Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        /// <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);
        }