示例#1
0
 /// <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());
     }
 }
示例#2
0
        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
        }
示例#3
0
        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();
        }