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); }
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))); } }