Ejemplo n.º 1
0
        private Passo[,] gerarMatriz(string nomeArq, int qtdCidades)
        {
            Passo[,] matrizAdjacencias = new Passo[qtdCidades, qtdCidades];
            StreamReader leitorDeCaminhosCidades = new StreamReader(nomeArq);

            while (!leitorDeCaminhosCidades.EndOfStream)
            {
                string linha     = leitorDeCaminhosCidades.ReadLine();
                int    idOrigem  = int.Parse(linha.Substring(0, 3));
                int    idDestino = int.Parse(linha.Substring(3, 3));
                int    distancia = int.Parse(linha.Substring(6, 5));
                int    tempo     = int.Parse(linha.Substring(11, 4));
                int    custo     = int.Parse(linha.Substring(15, 5));


                Passo c = new Passo(arvoreCidades.BuscarDado(new Cidade(idOrigem)), arvoreCidades.BuscarDado(new Cidade(idDestino)), distancia, tempo, custo);
                matrizAdjacencias[idOrigem, idDestino] = c;
            }

            return(matrizAdjacencias);
        }
Ejemplo n.º 2
0
        public Dijkstra(ArvoreCidades arvoreCidades, Passo[,] matrizAdj, bool distancia, bool custo, bool tempo)
        {
            // verificação se foi passado apenas um boolean true
            int qtsTrues = 0;

            if (distancia == true)
            {
                qtsTrues++;
            }
            if (custo == true)
            {
                qtsTrues++;
            }
            if (tempo == true)
            {
                qtsTrues++;
            }
            if (qtsTrues != 1)
            {
                throw new Exception("Passe apenas um critério de peso!");
            }

            // inicialização de variáveis
            this.totalDeVertices = matrizAdj.GetLength(0);
            this.vertices        = new Vertice[this.totalDeVertices];
            this.matriz          = new int[this.totalDeVertices, this.totalDeVertices];
            this.nTree           = 0;

            // inserindo valores na matriz
            for (int i = 0; i < this.totalDeVertices; i++)
            {
                for (int j = 0; j < this.totalDeVertices; j++)
                {
                    if (matrizAdj[i, j] == null)
                    {
                        this.matriz[i, j] = infinity;
                    }
                    else
                    {
                        if (distancia)
                        {
                            this.matriz[i, j] = matrizAdj[i, j].Distancia;
                        }
                        else if (custo)
                        {
                            this.matriz[i, j] = matrizAdj[i, j].Custo;
                        }
                        else if (tempo)
                        {
                            this.matriz[i, j] = matrizAdj[i, j].Tempo;
                        }
                    }
                }
            }

            trajeto = new DistOriginal[this.totalDeVertices];

            for (int i = 0; i < this.totalDeVertices; i++)
            {
                this.vertices[i] = new Vertice(arvoreCidades.BuscarDado(new Cidade(i, "", null)));
            }
        }