// Método que por pesquisa binária a partir do id, procura a cidade desejada
        private CidadeMarte VisitarCidades(NoArvore <CidadeMarte> atual, int idCidade, CidadeMarte cm)
        {
            CidadeMarte ret = null;

            if (atual == null)
            {
                return(ret);
            }

            if (atual.Info.Id == idCidade)
            {
                ret = atual.Info;
                return(ret);
            }

            if (atual.Info.Id.CompareTo(idCidade) > 0)
            {
                ret = VisitarCidades(atual.Esq, idCidade, ret);
            }
            else
            {
                ret = VisitarCidades(atual.Dir, idCidade, ret);
            }

            return(ret);
        }
Ejemplo n.º 2
0
        // DESENHA MAPA
        private void pbMapa_Paint(object sender, PaintEventArgs e)
        {
            Graphics g       = e.Graphics;
            SizeF    tamanho = new SizeF(12, 12);
            Point    ponto;

            List <CidadeMarte> listaCidades = arvoreCidades.ParaLista();

            for (int i = 0; i < listaCidades.Count; i++)
            {
                ponto   = new Point();
                ponto.X = listaCidades.ElementAt(i).CoordX *pbMapa.Width / 4096 - 5;
                ponto.Y = listaCidades.ElementAt(i).CoordY *pbMapa.Height / 2048 - 5;
                RectangleF rect = new RectangleF(ponto, tamanho);
                g.DrawString(listaCidades.ElementAt(i).Nome, new Font(this.Font, FontStyle.Bold), Brushes.Black, ponto.X - 18, ponto.Y + 15);
                g.DrawString(listaCidades.ElementAt(i).Id + "", new Font(this.Font, FontStyle.Bold), Brushes.WhiteSmoke, ponto.X, ponto.Y + 28);


                g.FillEllipse(Brushes.Black, rect);

                lsbOrigem.Items.Add((i) + " - " + listaCidades.ElementAt(i).Nome);
                lsbDestino.Items.Add((i) + " - " + listaCidades.ElementAt(i).Nome);
            }

            if (pilhaMenorCaminho != null)
            {
                var aux = pilhaMenorCaminho.Copia();
                while (!aux.EstaVazia())
                {
                    CaminhoMarte c       = aux.Desempilhar();
                    CidadeMarte  origem  = listaCidades.ElementAt(c.IdCidadeOrigem);
                    CidadeMarte  destino = listaCidades.ElementAt(c.IdCidadeDestino);

                    Point ori  = new Point();
                    Point dest = new Point();
                    ori.X  = origem.CoordX * pbMapa.Width / 4096 - 5;
                    ori.Y  = origem.CoordY * pbMapa.Height / 2048 - 5;
                    dest.X = destino.CoordX * pbMapa.Width / 4096 - 5;
                    dest.Y = destino.CoordY * pbMapa.Height / 2048 - 5;

                    g.DrawLine(new Pen(Color.Black), ori.X + 5, ori.Y + 5, dest.X + 5, dest.Y + 5);

                    //destaca a origem e o destino em azul
                    RectangleF rectOri  = new RectangleF(ori, tamanho);
                    RectangleF rectDest = new RectangleF(dest, tamanho);
                    g.FillEllipse(Brushes.Blue, rectOri);
                    g.FillEllipse(Brushes.Blue, rectDest);
                }
            }
        }
        // Método que lê de um arquivo texto e constroe uma árvore a partir dele
        private void ConstruirArvore(string nomeArquivo)
        {
            if (nomeArquivo == null || nomeArquivo.Equals(""))
            {
                throw new Exception("Nome de arquivo invalido");
            }

            var arquivo = new StreamReader(nomeArquivo);

            arvoreBinaria = new ArvoreBinaria <CidadeMarte>();
            while (!arquivo.EndOfStream)
            {
                string linha      = arquivo.ReadLine();
                int    id         = int.Parse(linha.Substring(0, 3));
                string nomeCidade = linha.Substring(3, 15);
                int    x          = int.Parse(linha.Substring(18, 5));
                int    y          = int.Parse(linha.Substring(23, 5));

                var cidadeMarte = new CidadeMarte(id, nomeCidade, x, y);
                arvoreBinaria.InserirInfo(cidadeMarte);
            }

            arquivo.Close();
        }
        // Método que encontra uma cidade na da árvore a partir do id
        public CidadeMarte GetCidade(int idCidade)
        {
            CidadeMarte ret = null;

            return(VisitarCidades(arvoreBinaria.Raiz, idCidade, ret));
        }