public Monstro(Salao Salao, int Vida) { this.Salao = Salao; if (Vida < 1) { this.Vida = 1; } else if (Vida > 1000) { this.Vida = 1000; } else { this.Vida = Vida; } }
private static void LerMonstros(string[] linhas, ref int linhaCont, CasoDeTeste _teste) { for (int i = 0; i < _teste.NumeroMonstro; i++) { string[] linha = linhas[++linhaCont].Split(' '); Salao _salao = null; _teste.Saloes.ForEach(s => { if (s.NumeroSalao == int.Parse(linha[0])) { _salao = s; } }); Monstro _monstro = new Monstro(_salao, int.Parse(linha[1])); _salao.Monstros.Add(_monstro); } }
private static int ParticaoSaloes(List <Salao> salao, int inicio, int fim) { Salao aux; Salao pivot = salao[fim]; int part = inicio - 1; for (int i = inicio; i < fim; i++) { if (salao[i].NumeroSalao < pivot.NumeroSalao) { part = part + 1; aux = salao[part]; salao[part] = salao[i]; salao[i] = aux; } } aux = salao[part + 1]; salao[part + 1] = salao[fim]; salao[fim] = aux; return(part + 1); }
private static void LerGalerias(string[] linhas, ref int linhaCont, CasoDeTeste _teste) { for (int i = 0; i < _teste.NumeroGaleria; i++) { string[] linha = linhas[++linhaCont].Split(' '); Salao _salao1 = null, _salao2 = null; _teste.Saloes.ForEach(s => { if (s.NumeroSalao == int.Parse(linha[0])) { _salao1 = s; } else if (s.NumeroSalao == int.Parse(linha[1])) { _salao2 = s; } }); Galeria _galeria = new Galeria(_salao1, _salao2); _salao1.Galeria.Add(_galeria); _salao2.Galeria.Add(_galeria); _teste.Galerias.Add(_galeria); } }
public Monstro(Salao Salao) { this.Salao = Salao; }
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]; }