// 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); } } }
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 } }