Пример #1
0
        private void btnCarregarCidades_Click(object sender, EventArgs e)
        {
            if (dlgAbrir.ShowDialog() == DialogResult.OK)
            {
                StreamReader sr = new StreamReader(dlgAbrir.FileName, Encoding.Default);
                while (!sr.EndOfStream)
                {
                    var registro = sr.ReadLine();
                    if (registro.TrimEnd().Length == 28)
                    {
                        cidades.Incluir(new Cidade(registro));
                    }
                }
                sr.Close();
                btnCarregarCidades.Enabled  = false;
                btnCarregarCaminhos.Enabled = true;

                lsbDestino.Items.Clear();
                lsbOrigem.Items.Clear();

                ColocarNasListboxes(cidades.Raiz);
                fonteCidades = new Font(fonteCidades.FontFamily, (float)Width / 130, FontStyle.Bold);

                pbMapa.Invalidate();
            }
        }
Пример #2
0
        /*
         * Constrói uma árvore com as cidades baseado em um arquivo recebido com parâmetro.
         * @params um StreamReader que contém o arquivo que será lido.
         */
        private void ConstruirArvore(StreamReader arquivo)
        {
            while (!arquivo.EndOfStream)
            {
                arvore.Incluir(Cidade.LerRegistro(arquivo));
            }

            arquivo.Close();
        }
Пример #3
0
        //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();
        }
Пример #4
0
        public void lerCidades()
        {
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //Lê o arquivo de cidades e guarda as cidades na arvoreCidade
            arquivoCidades = new StreamReader("CidadesMarte.txt");
            String linha;

            while (!arquivoCidades.EndOfStream)
            {
                linha = arquivoCidades.ReadLine();

                int    idCidade    = int.Parse(linha.Substring(0, 3));
                string nomeCidade  = linha.Substring(3, 15);
                int    coordenadaX = int.Parse(linha.Substring(18, 5));
                int    coordenadaY = int.Parse(linha.Substring(23, 5));

                Cidade cidadeAux = new Cidade(idCidade, nomeCidade, coordenadaX, coordenadaY);
                arvoreCidade.Incluir(cidadeAux);
            }
        }
Пример #5
0
        private void LerArquivo(PaintEventArgs e)                                                 //Método responsável por ler os arquivos e criar a árvore usada pelo programa, juntamente com matriz
        {
            int n          = 0;                                                                   //
            int qtdCidades = 1;                                                                   //Variável local que guarda o número de cidades a serem lidas do arquivo

            StreamReader arq       = new StreamReader("CidadesMarte.txt", Encoding.UTF7);         //Criação do StreamReader responsável por ler o arquivo que contém as cidades, seus códigos, nomes e localização no mapa
            StreamReader aux       = new StreamReader("CidadesMarteOrdenado.txt", Encoding.UTF7); //Criação do StreamReader responsável por ler o arquivo que contém os nomes cidades, que são exibidas ordenadamente de acordo com seus respectivos códigos
            string       linha     = arq.ReadLine();                                              //Variável tipo string que guarda todas as informações lidas no primeiro arquivo mencionado
            string       linha2    = aux.ReadLine();                                              //Variável tipo string que guarda todas as informações lidas no segundo arquivo mencionado
            Cidade       cid       = new Cidade(linha);                                           //Criação da primeira cidade que é lida no arquivo desordenado de acordo com as informações lidas na linha atual e por meio do construtor adaptado à esse tipo de construção, na classe Cidade
            Cidade       cid2      = new Cidade(linha2);                                          //Criação da primeira cidade que aparece no arquivo ordenado, de acordo com as informações lidas na linha atual e por meio do construtor adaptado à esse tipo de construção, na classe Cidade
            var          qtdLinhas = File.ReadLines("CidadesMarteOrdenado.txt").Count();          //Variável que guarda a quantidade de linhas que tem o primeiro arquivo; essa quantidade de linhas corresponde ao número de cidades que serão registradas

            if (lsbOrigem.Items.Count < qtdLinhas)                                                //Verificação: se o número de itens do listbox for menor que o número de cidades que esrão/foram registradas
            {                                                                                     //Caso seja, podemos adicionar nos dois listbox
                lsbDestino.Items.Add(n + "-" + cid2.Nome);                                        //Adição do código e nome da cidade, respectivamente, no listbox de origens
                lsbOrigem.Items.Add(n + "-" + cid2.Nome);                                         //Adição do código e nome da cidade, respectivamente, no listbox de destinos

                arvore.Raiz = new NoArvore <Cidade>(cid);                                         //Como essa é a primeira cidade lida, esta deve ser tida como raiz da
                                                                                                  //árvore do programa; Como uma árvore criada a partir de um arquivo ordenado é "tombada" para a direita, por conta da contrução de esquerda(menores valores) e direita(maiores valores), a cidade passada como referência é a cid, adquirida pela leitura do arquivo desordenado
            }//Caso não seja, nada é adicionado ou alterado

            Graphics grafico = e.Graphics;                            //Atribuição do gráfico adquirido pelo parâmetro à variável grafico do tipo Graphics, responsável pela alteração do gráfico exibido ao usuário
            Point    p       = new Point();                           //Instanciação de um Point, necessário na exibição dos pontos no gráficos, representantes das localizações das cidades

            p.X = cid.X * pbMapa.Width / 4096;                        //Atribuição da localização, no eixo X, do ponto p
            p.Y = cid.Y * pbMapa.Height / 2048;                       //Atribuição da localização, no eixo Y, do ponto p
            SolidBrush pincel = new SolidBrush(Color.Black);          //Declaração de um SolidBrush, responsávl por escrever os nomes das cidades

            //Método que desenha no gráfico o nome da cidade criada
            grafico.DrawString(cid.Nome, new Font("Arial", 10, FontStyle.Bold), pincel, new Point(p.X, p.Y - 20));
            //Método que desenha no gráfico o ponto representando a localização da cidade criada
            grafico.FillEllipse(pincel, new RectangleF(p.X, p.Y, 8, 8));

            while (!arq.EndOfStream)           //Loop: enquanto o arquivo não for totalmente lido; Como os dois arquivos tem necessariamente o mesmo tamanho, é possível verificar o término de qualquer um dois dois
            {
                n++;
                linha  = arq.ReadLine();                       //Atribuição à variável linha as informações lidas na linha atual do arquivo
                linha2 = aux.ReadLine();                       //Atribuição à variável linha2 as informações lidas na linha atual do segundo arquivo
                cid    = new Cidade(linha);                    //Criação da  cidade que foi atualmente lida no arquivo desordenado de acordo com as informações lidas na linha atual e por meio do construtor adaptado à esse tipo de construção, na classe Cidade
                cid2   = new Cidade(linha2);                   //Criação da  cidade que foi atualmente no arquivo ordenado, de acordo com as informações lidas na linha atual e por meio do construtor adaptado à esse tipo de construção, na classe Cidade

                if (lsbOrigem.Items.Count < qtdLinhas)         //Verificação: se o número de itens do listbox for menor que o número de cidades que esrão/foram registradas
                {                                              //Caso seja, podemos adicionar nos dois listbox
                    lsbDestino.Items.Add(n + "-" + cid2.Nome); //Adição do código e nome da cidade, respectivamente, no listbox de origens
                    lsbOrigem.Items.Add(n + "-" + cid2.Nome);  //Adição do código e nome da cidade, respectivamente, no listbox de destinos

                    arvore.Incluir(cid);                       //Inclusão da cidade (do arquivo desordenado, para a construção estrutural correta da árvore) lida à árvore
                }//Caso não seja, nada é adicionado ou alterado

                p      = new Point();                                     //Instanciação de um novo Point, que irá representar a localização da cidade lida atualmente
                p.X    = cid.X * pbMapa.Width / 4096;                     //Atribuição da localização, no eixo X, do ponto p
                p.Y    = cid.Y * pbMapa.Height / 2048;                    //Atribuição da localização, no eixo Y, do ponto p
                pincel = new SolidBrush(Color.Black);                     //Declaração de um SolidBrush, responsávl por escrever os nomes das cidades
                //Método que desenha no gráfico o nome da cidade criada
                grafico.DrawString(cid.Nome, new Font("Arial", 10, FontStyle.Bold), pincel, new Point(p.X, p.Y - 20));
                //Método que desenha no gráfico o ponto representando a localização da cidade criada
                grafico.FillEllipse(pincel, new RectangleF(p.X, p.Y, 8, 8));

                qtdCidades++;                                             //Adição de uma unidade à variável que guarda a quantidade de cidades lidas
            }

            arq.Close();                                                  //Encerramento da leitura do arquivo, fechando-o
            aux.Close();                                                  //Encerramento da leitura do arquivo, fechando-o

            CriarMatriz();                                                //Chamada do método responsável por instanciar e preencher a matriz, que é usada na verificação da existência de uma rota ou não entre duas cidades
        }
Пример #6
0
        public void lerArquivos()
        {
            StreamReader leitor = new StreamReader("F:\\ED2\\Projeto2_DirigiveisEmMarte\\CidadesMarte.txt", Encoding.UTF7, true);

            string linha = leitor.ReadLine();

            cidades.Raiz = new NoArvore <Cidade>(new Cidade(linha));

            while (!leitor.EndOfStream)
            {
                linha = leitor.ReadLine();
                cidades.Incluir(new Cidade(linha));
            }

            leitor.Close();

            rotasMatriz = new int[cidades.QuantosDados + 1, cidades.QuantosDados + 1];

            leitor = new StreamReader("F:\\ED2\\Projeto2_DirigiveisEmMarte\\CidadesMarteOrdenado.txt", Encoding.UTF7, true);

            int indice = 1;

            rotasMatriz[0, 0] = -1;

            while (!leitor.EndOfStream)
            {
                linha = leitor.ReadLine();
                Cidade nova = new Cidade(linha);
                cidades.Atual = new NoArvore <Cidade>(nova);

                rotasMatriz[indice, 0] = nova.Cod;
                rotasMatriz[0, indice] = nova.Cod;

                lsbOrigem.Items.Add(nova.Cod + " - " + nova.Nome);
                lsbDestino.Items.Add(nova.Cod + " - " + nova.Nome);

                indice++;
            }

            leitor.Close();

            leitor = new StreamReader("F:\\ED2\\Projeto2_DirigiveisEmMarte\\CaminhosEntreCidadesMarte.txt", Encoding.UTF7, true);

            while (!leitor.EndOfStream)
            {
                linha = leitor.ReadLine();
                Caminho novo = new Caminho(linha);
                caminhos.InserirAposFim(novo);

                for (int i = 1; i < cidades.QuantosDados + 1; i++)
                {
                    if (i - 1 == novo.CodOrigem)
                    {
                        for (int a = 1; a < cidades.QuantosDados + 1; a++)
                        {
                            if (a - 1 == novo.CodDestino)
                            {
                                rotasMatriz[i, a] = novo.Distancia;
                            }
                        }
                    }
                }
            }

            leitor.Close();
            quantosdados       = cidades.QuantosDados;
            cidades.OndeExibir = tpArvore;
        }
Пример #7
0
        private void Form1_Load(object sender, EventArgs e)
        {
            arvoreCidades  = new Arvore <CidadeMarte>();
            matrizCaminhos = new int[23, 23];

            dgvCaminhosEncontrados.RowCount = 0;



            //arquivo cidades
            try
            {
                // vai ler o arquivo e armazenar em uma árvore
                StreamReader arquivo;

                arquivo = new StreamReader(@"C:\Temp\CidadesMarte.txt", Encoding.Default);
                while (!arquivo.EndOfStream)
                {
                    string linha = arquivo.ReadLine();
                    arvoreCidades.Incluir(new CidadeMarte(int.Parse(linha.Substring(1, 2)),      // id
                                                          linha.Substring(3, 16),                // nome
                                                          int.Parse(linha.Substring(19, 4)),     // coordx
                                                          int.Parse(linha.Substring(24, 4))));   // coordy
                }
            }
            catch
            { //caso não consiga achar o arquivo ele da um openfile
                StreamReader arquivo;
                MessageBox.Show("Selecione o arquivo das cidades (CidadesMarte.txt)");
                if (dlgAbrir.ShowDialog() == DialogResult.OK)
                {
                    arquivo = new StreamReader(dlgAbrir.FileName);
                }
                else
                {
                    arquivo = new StreamReader(@"C:\Temp\CidadesMarte.txt", Encoding.Default);
                }

                while (!arquivo.EndOfStream)
                {
                    string linha = arquivo.ReadLine();
                    arvoreCidades.Incluir(new CidadeMarte(int.Parse(linha.Substring(1, 2)),      // id
                                                          linha.Substring(3, 16),                // nome
                                                          int.Parse(linha.Substring(19, 4)),     // coordx
                                                          int.Parse(linha.Substring(24, 4))));   // coordy
                }
            }


            // arquivo caminhos
            try
            {
                StreamReader arquivo;
                arquivo = new StreamReader(@"C:\Temp\CaminhosEntreCidadesMarte.txt", Encoding.Default);
                while (!arquivo.EndOfStream)
                {
                    string linha = arquivo.ReadLine();
                    matrizCaminhos[int.Parse(linha.Substring(1, 2)), int.Parse(linha.Substring(4, 2))] = int.Parse(linha.Substring(7, 4));
                    // id origem             // id destino                    // distancia
                }
            }
            catch
            {
                StreamReader arquivo;
                MessageBox.Show("Selecione o arquivo dos caminhos (CaminhosEntreCidadesMarte.txt)");
                if (dlgAbrir.ShowDialog() == DialogResult.OK)
                {
                    arquivo = new StreamReader(dlgAbrir.FileName);
                }
                else
                {
                    arquivo = new StreamReader(@"C:\Temp\CaminhosEntreCidadesMarte.txt", Encoding.Default);
                }

                while (!arquivo.EndOfStream)
                {
                    string linha = arquivo.ReadLine();
                    matrizCaminhos[int.Parse(linha.Substring(1, 2)), int.Parse(linha.Substring(4, 2))] = int.Parse(linha.Substring(7, 4));
                    // id origem             // id destino                    // distancia
                }
            }

            pnlArvore.Invalidate();
        }