/// <summary> /// Lê o arquivo recebido por referência, realizando pesquisa binária para inserir em ordem na árvore /// </summary> /// <param name="inicio">Indíce de início</param> /// <param name="fim">Indíce de fim</param> /// <param name="atual">Nó atual da árvore</param> /// <param name="regCidade">Objeto para leitura dos registros</param> /// <param name="arqCidades">Arquivo a ser lido</param> private void LeituraDaArvore(long inicio, long fim, ref NoArvore <Cidade> atual, ref RegistroCidade regCidade, ref FileStream arqCidades) { if (inicio <= fim) { int meio = (int)(inicio + fim) / 2; Cidade umaCidade = new Cidade("", 0D, 0D); regCidade.LerRegistro(arqCidades, meio, ref umaCidade); atual = new NoArvore <Cidade>(umaCidade); LeituraDaArvore(inicio, meio - 1, ref atual.esquerdo, ref regCidade, ref arqCidades); LeituraDaArvore(meio + 1, fim, ref atual.direito, ref regCidade, ref arqCidades); txtCidade.Items.Add(atual.Info.ToString()); cbxPartida.Items.Add(atual.Info.ToString()); cbxDestino.Items.Add(atual.Info.ToString()); } }
private void btnManutCidade_Click(object sender, EventArgs e) { frmManutCidade ManutCidade = new frmManutCidade(); // chama o formulário de manutenção de cidades ManutCidade.ShowDialog(this); grafoCaminhos = new GrafoCidades(null); cidades = new String[GrafoCidades.NUM_VERTICES]; cbxDestino.Items.Clear(); cbxOrigem.Items.Clear(); // Lê os arquivos novamente para atualizar as alterações FileStream arqCidades = new FileStream("arqCidades.cid", FileMode.OpenOrCreate); RegistroCidade regCidade = new RegistroCidade(); for (int i = 0; i < arqCidades.Length / Cidade.TAMANHO_DO_REGISTRO; i++) { Cidade novaCidade = new Cidade("", 0D, 0D); regCidade.LerRegistro(arqCidades, i, ref novaCidade); cidades[i] = novaCidade.ToString(); cbxDestino.Items.Add(novaCidade.ToString()); cbxOrigem.Items.Add(novaCidade.ToString()); grafoCaminhos.NovoVertice(novaCidade); } arqCidades.Close(); FileStream arqCaminhos = new FileStream("arqCaminhos.cam", FileMode.OpenOrCreate); RegistroCaminho regCaminho = new RegistroCaminho(); for (int i = 0; i < arqCaminhos.Length / Caminho.TAMANHO_DO_REGISTRO; i++) { Caminho novoCaminho = new Caminho(new Cidade("", 0D, 0D), new Cidade("", 0D, 0D), int.MaxValue); regCaminho.LerRegistro(arqCaminhos, i, ref novoCaminho); int cid1 = IndiceDe(novoCaminho.Saida.ToString()); int cid2 = IndiceDe(novoCaminho.Destino.ToString()); if (cid1 > 0 && cid2 > 0) { grafoCaminhos.NovaAresta(cid1, cid2, novoCaminho.Distancia); } } arqCaminhos.Close(); panel1.Invalidate(); // atualiza o panel1 }
private void frmBuscaCaminhos_Load(object sender, EventArgs e) { grafoCaminhos = new GrafoCidades(null); cidades = new String[GrafoCidades.NUM_VERTICES]; FileStream arqCidades = new FileStream("arqCidades.cid", FileMode.OpenOrCreate); // abre o arquivo, criando-o se não existir RegistroCidade regCidade = new RegistroCidade(); for (int i = 0; i < arqCidades.Length / Cidade.TAMANHO_DO_REGISTRO; i++) //Enquanto houver registros para ler, o faz { Cidade novaCidade = new Cidade("", 0D, 0D); regCidade.LerRegistro(arqCidades, i, ref novaCidade); // lê o registro e o armazena em novaCidade cidades[i] = novaCidade.ToString(); cbxDestino.Items.Add(novaCidade.ToString()); cbxOrigem.Items.Add(novaCidade.ToString()); grafoCaminhos.NovoVertice(novaCidade); } arqCidades.Close(); // fecha o arquivo de cidades FileStream arqCaminhos = new FileStream("arqCaminhos.cam", FileMode.OpenOrCreate); // abre o arquivo, criando-o se não existir RegistroCaminho regCaminho = new RegistroCaminho(); for (int i = 0; i < arqCaminhos.Length / Caminho.TAMANHO_DO_REGISTRO; i++) //Enquanto houver registros para ler, o faz { Caminho novoCaminho = new Caminho(new Cidade("", 0D, 0D), new Cidade("", 0D, 0D), int.MaxValue); regCaminho.LerRegistro(arqCaminhos, i, ref novoCaminho); // lê o registro e o armazena em novoCaminho int cid1 = IndiceDe(novoCaminho.Saida.ToString()); int cid2 = IndiceDe(novoCaminho.Destino.ToString()); if (cid1 > 0 && cid2 > 0) // se as duas cidades existirem { grafoCaminhos.NovaAresta(cid1, cid2, novoCaminho.Distancia); // cria uma novas aresta entre essa cidades } } arqCaminhos.Close(); //fecha o arquivo de caminhos panel1.Invalidate(); }