コード例 #1
0
ファイル: Arquivo.cs プロジェクト: juliocnp/Goku
 private void Abrir_Click(object sender, EventArgs e)
 {
     using (OpenFileDialog opf = new OpenFileDialog())
     {
         opf.ShowDialog();
         var  caminho  = opf.FileName;
         bool validado = false;
         try
         {
             Estruturas.LerArquivo(caminho);
             validado = true;
         }
         catch (Exception err)
         {
             MessageBox.Show("Não foi possível ler o arquivo, insira novamente.");
         }
         if (validado)
         {
             this.Hide();
             Resultados resultados = new Resultados();
             resultados.Show();
         }
     }
 }
コード例 #2
0
ファイル: Resultados.cs プロジェクト: juliocnp/Goku
        private void Djikstra(CasoDeTeste teste, out int melhorKi, string metodo)
        {
            Salao origem = teste.Saloes[0];
            List <List <Salao> > caminho = new List <List <Salao> >();
            List <int>           gastoKi = new List <int>();

            melhorKi = 0;
            int[,] tabelaDinamica = new int[0, 0];
            if (metodo == "DN")
            {
                tabelaDinamica = Estruturas.PreencherTabelaDinamica(teste);
            }

            for (int i = 0; i < teste.Saloes.Count; i++)
            {
                gastoKi.Add(int.MaxValue);
                caminho.Add(new List <Salao>());
            }

            gastoKi[0] = 0;

            while (true)
            {
                Salao selecionado  = null;
                int   menorGastoKi = int.MaxValue;
                for (int i = 0; i < gastoKi.Count; i++)
                {
                    if (menorGastoKi >= gastoKi[i] && !teste.Saloes[i].visitado)
                    {
                        menorGastoKi = gastoKi[i];
                        selecionado  = teste.Saloes[i];
                    }
                }
                if (selecionado == null)
                {
                    break;
                }
                selecionado.visitado = true;
                selecionado.Galeria.ForEach(galeria =>
                {
                    Salao vizinho;
                    if (galeria.Salao1 == selecionado)
                    {
                        vizinho = galeria.Salao2;
                    }
                    else
                    {
                        vizinho = galeria.Salao1;
                    }
                    if (!vizinho.visitado)
                    {
                        int indexVizinho     = teste.Saloes.IndexOf(vizinho);
                        int indexSelecionado = teste.Saloes.IndexOf(selecionado);
                        if (gastoKi[indexSelecionado] + teste.Saloes[indexSelecionado].Combate(teste.Goku, tabelaDinamica, metodo) < gastoKi[indexVizinho])
                        {
                            gastoKi[indexVizinho] = gastoKi[indexSelecionado] + teste.Saloes[indexSelecionado].Combate(teste.Goku, tabelaDinamica, metodo);
                            caminho[indexVizinho] = caminho[indexSelecionado];
                            caminho[indexVizinho].Add(teste.Saloes[indexVizinho]);
                            teste.Saloes[indexSelecionado].visitado = true;
                        }
                    }
                });

                bool verticesNaoVisitados = false;
                for (int i = 0; i < teste.Saloes.Count; i++)
                {
                    if (!teste.Saloes[i].visitado)
                    {
                        verticesNaoVisitados = true;
                    }
                }

                if (!verticesNaoVisitados)
                {
                    break;
                }

                selecionado = null;
            }

            melhorKi = gastoKi[teste.Saloes.Count - 1];
        }