예제 #1
0
 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);
 }
예제 #2
0
        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);
 }