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(); } } }
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]; }