示例#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));
        }
示例#2
0
        public int PrimeiraQuestao(string caminho)
        {
            DijkstraUtil util     = new DijkstraUtil();
            GrafoModel   grafo    = util.MontaGrafo(caminho);
            Dijkstra     dijkstra = new Dijkstra(grafo);

            return(dijkstra.RetornaDistanciaTrajeto());
        }
示例#3
0
        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);
            }
        }
示例#4
0
 public Dijkstra(GrafoModel grafo)
 {
     // cria uma copia dos arrays, assim podemos trabalhar neles sem alterar o Grafo
     this.nodo    = new List <VerticeModel>(grafo.Vertices);
     this.arestas = new List <ArestaModel>(grafo.Arestas);
 }