Ejemplo n.º 1
0
        private void frmManutCidade_Load(object sender, EventArgs e)
        {
            FileStream arqCidades = new FileStream("arqCidades.cid", FileMode.OpenOrCreate); // Lê o arquivo de cidades

            arvoreCidades = new ArvoreDeBusca <Cidade>();
            NoArvore <Cidade> raizTemp  = arvoreCidades.Raiz;
            RegistroCidade    regCidade = new RegistroCidade();

            LeituraDaArvore(0, arqCidades.Length / Cidade.TAMANHO_DO_REGISTRO - 1,
                            ref raizTemp, ref regCidade, ref arqCidades); // não deixa passar propriedade como ref
            arqCidades.Close();
            lstCaminhos.HorizontalScrollbar = true;
            arvoreCidades.raiz       = raizTemp;
            arvoreCidades.OndeExibir = pnlArvore;

            FileStream arqCaminhos = new FileStream("arqCaminhos.cam", FileMode.OpenOrCreate); // Lê o arquivo de caminhos

            listaCaminhos = new ListaCaminhos();
            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);
                listaCaminhos.inserirEmOrdem(novoCaminho);
                lstCaminhos.Items.Add(novoCaminho.ToString());
            }
            arqCaminhos.Close();
            pnlArvore.Invalidate();
        }
Ejemplo n.º 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
        }
Ejemplo n.º 3
0
        private void frmManutCidade_FormClosing(object sender, FormClosingEventArgs e)
        {
            FileStream     arqCidades = new FileStream("arqCidades.cid", FileMode.Truncate); // Abre os arquivos para escrita e
            RegistroCidade regCidade  = new RegistroCidade();                                // apaga tudo que estivesse neles anteriormente

            GravarArquivoCidade(ref arqCidades, ref arvoreCidades.raiz, ref regCidade);      // Percurso inordem da árvore e escrita
            arqCidades.Close();
            FileStream      arqCaminhos = new FileStream("arqCaminhos.cam", FileMode.Truncate);
            RegistroCaminho regCaminho  = new RegistroCaminho();
            int             indice      = 0;

            listaCaminhos.IniciarPercursoSequencial();
            while (listaCaminhos.PodePercorrer()) // Percorre a lista sequencialmente e salva as informações
            {
                regCaminho.GravarRegistro(arqCaminhos, indice, listaCaminhos.Atual.Info);
                indice++;
            }
            arqCaminhos.Close();

            DialogResult = DialogResult.OK;
        }
Ejemplo n.º 4
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();
        }
Ejemplo n.º 5
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());
     }
 }
Ejemplo n.º 6
0
 private void GravarArquivoCidade(ref FileStream f, ref NoArvore <Cidade> atual, ref RegistroCidade registro)
 {
     if (atual != null)
     {
         GravarArquivoCidade(ref f, ref atual.esquerdo, ref registro);
         registro.GravarRegistro(f, posicao++, atual.Info);
         GravarArquivoCidade(ref f, ref atual.direito, ref registro);
     }
 }