private void Form1_Shown(object sender, EventArgs e) { marte = new Marte("CidadesMarte.txt", "CaminhosEntreCidadesMarte.txt"); pbMapa.Image = Image.FromFile("mars_political_map_by_axiaterraartunion_d4vfxdf-pre.jpg"); Application.DoEvents(); marte.DesenharCidades(pbMapa, this.imgWidth, this.imgHeight); }
int imgWidth = 4096, imgHeight = 2048; // variáveis responsáveis por amarzenar o tamanho do picture box private void BtnBuscar_Click(object sender, EventArgs e) { // limpa o mapa pbMapa.Image = Image.FromFile("mars_political_map_by_axiaterraartunion_d4vfxdf-pre.jpg"); Application.DoEvents(); marte.DesenharCidades(pbMapa, this.imgWidth, this.imgHeight); // limpa os datagridview's dgvMelhorCaminho.Rows.Clear(); dgvCaminhos.Rows.Clear(); try { // busca todos os caminhos passando o índice (ID) das cidades selecionadas como parâmetro List <List <Passo> > caminhos = marte.AcharCaminhos(lsbOrigem.SelectedIndex, lsbDestino.SelectedIndex, recursivo: rbRecursao.Checked, pilha: rbPilha.Checked, dijkstra: rbDijkstra.Checked, rbDistancia.Checked, rbCusto.Checked, rbTempo.Checked); List <Passo> menorCaminho = null; int menorDistancia = int.MaxValue; int maiorDistancia = int.MinValue; int i = 0; dgvCaminhos.RowCount = caminhos.Count(); foreach (List <Passo> caminho in caminhos) // para cada caminho na lista de caminhos { // 'for' para ajustar as colunas do datagridview if (caminho.Count > maiorDistancia) { dgvCaminhos.ColumnCount = caminho.Count(); maiorDistancia = caminho.Count(); } // preenche as colunas do caminho, salvando a distancia pecorrida int j = 0; int pesoTotal = 0; foreach (Passo passo in caminho) { dgvCaminhos.Rows[i].Cells[j].Value = $"{passo.Destino.Nome}"; j++; if (rbDistancia.Checked) { pesoTotal += passo.Distancia; } else if (rbCusto.Checked) { pesoTotal += passo.Custo; } else if (rbTempo.Checked) { pesoTotal += passo.Tempo; } } // verifica se o caminho atual é menor que os já feitos if (pesoTotal < menorDistancia) { menorCaminho = caminho; menorDistancia = pesoTotal; } i++; } // após exibir todos caminhos, exibe-se o melhor deles no dgvMelhor Caminho dgvMelhorCaminho.RowCount = 1; dgvMelhorCaminho.ColumnCount = menorCaminho.Count(); i = 0; foreach (Passo passo in menorCaminho) { dgvMelhorCaminho.Rows[0].Cells[i++].Value = $"{passo.Destino.Nome}"; } // setamos as variáveis globais para salvar os caminhos this.caminhos = caminhos; this.melhorCaminho = menorCaminho; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void Form1_Shown(object sender, EventArgs e) { pbMapa.Image = Image.FromFile("mars_political_map_by_axiaterraartunion_d4vfxdf-pre.jpg"); Application.DoEvents(); marte.DesenharCidades(pbMapa, 4096, 2048); }