private void LerDeArquivo(bool ehCidade) // metodo usado para ler os dois arquivos que apenas recebe o boolean que indica se e cidade { if (dlgAbrir.ShowDialog() == DialogResult.OK) //Descobriremos o caminho do arquivo desejado { StreamReader arq = new StreamReader(dlgAbrir.FileName); // abertura do arquivo try { if (!ehCidade) // se for um arquivo de caminhos entre cidades { while (!arq.EndOfStream) // enquanto o arquivo nao terminou, percorremos { CaminhoEntreCidades c = new CaminhoEntreCidades(arq.ReadLine()); // le o caminho do arquivo caminhos[c.Destino, c.Origem] = c; // armazena o caminho na matriz } } else // se for um arquivo de cidades { while (!arq.EndOfStream) // enquanto o arquivo nao terminou, percorremos { Cidade c = new Cidade(arq.ReadLine()); // le a cidade do arquivo cidades.Incluir(c); // armazena a cidade na arvore } } } catch // caso arquivo nao esteja nos padroes de dados pre definidos, informa o usuario e chama novamente o metodo { MessageBox.Show("Por favor, selecione um arquivo válido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); LerDeArquivo(ehCidade); } arq.Close(); // fecha o arquivo lido } }
public GrafoBacktracking(string nomeArquivo) { // instancia-se leitor de arquivos com o nome do arquivo passado por parâmetro var arquivo = new StreamReader(nomeArquivo); qtasCidades = 23; // nº de cidades do arquivo matriz = new CaminhoEntreCidades[qtasCidades, qtasCidades]; // matriz [23,23] while (!arquivo.EndOfStream) // enquanto puder ler o arquivo { string linha = arquivo.ReadLine(); // lê uma linha por vez CaminhoEntreCidades caminho = new CaminhoEntreCidades(int.Parse(linha.Substring(0, 3)), int.Parse(linha.Substring(3, 3)), int.Parse(linha.Substring(6, 5)), int.Parse(linha.Substring(11, 4)), int.Parse(linha.Substring(15))); matriz[caminho.IdCidadeOrigem, caminho.IdCidadeDestino] = caminho; // add o caminho lido na matriz, com a linha = idCidadeOrigem e coluna = idCidadeDestino } arquivo.Close(); }
//ao iniciar o programa private void Form1_Load(object sender, EventArgs e) { //limpamos os itens existentes nos lsbs lsbOrigem.Items.Clear(); lsbDestino.Items.Clear(); //instanciamos variáveis caminho = new PilhaLista <int>(); cidades = new Arvore <Cidade>(); //leitura do arquivo de cidades de acordo com o método feito na classe Cidade //incluimos as cidades na árvore de cidades StreamReader arq = new StreamReader("CidadesMarte.txt"); while (!arq.EndOfStream) { Cidade cid = Cidade.LerArquivo(arq); cidades.Incluir(cid); } arq.Close(); //lemos o arquivo ordenado para inclusão das cidades nos lsbs de origem e destino arq = new StreamReader("CidadesMarteOrdenado.txt"); while (!arq.EndOfStream) { Cidade cid = Cidade.LerArquivo(arq); lsbOrigem.Items.Add(cid.IdCidade + "-" + cid.NomeCidade); lsbDestino.Items.Add(cid.IdCidade + "-" + cid.NomeCidade); } arq.Close(); //criamos uma matriz de cidades de acordo com a quantidade de cidades existentes adjacencias = new int[cidades.QuantosDados, cidades.QuantosDados]; //lemos o arquivo que nos passa os caminhos entre as cidades arq = new StreamReader("CaminhosEntreCidadesMarte.txt"); //cria-se uma variável que recebe o caminho entre as cidades //guarda-se a distância do caminho na matriz de acordo com a cidade de origem e cidade de destino //[idOrigem, idDestino] == [x,y] while (!arq.EndOfStream) { CaminhoEntreCidades caminho = CaminhoEntreCidades.LerArquivo(arq); adjacencias[caminho.IdCidadeOrigem, caminho.IdCidadeDestino] = caminho.Distancia; } arq.Close(); //pedimos para que o mapa seja redesenhado pbMapa.Invalidate(); }