示例#1
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);
                }
            }
        }
示例#2
0
        private void BuscarMenorCaminho(PilhaVetor <CaminhoMarte> pilha) //metodo que valida se o caminho é o menor
        {
            PilhaVetor <CaminhoMarte> ret = pilha.Copia();

            for (int i = 0; !pilha.EstaVazia(); i++)
            {
                CaminhoMarte aux = pilha.Desempilhar();
                atualDistancia += matrizCaminhos[aux.IdCidadeOrigem, aux.IdCidadeDestino]; //calcula a distancia utilizando a matriz adjacente
            }

            if (atualDistancia < menorDistancia) //se o novo caminho tem uma distancia menor que o último, atualiza
            {
                menorDistancia    = atualDistancia;
                pilhaMenorCaminho = ret; //guarda o caminho menor
            }
        }