Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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);
     }
 }
Beispiel #5
0
 public Monstro(Salao Salao)
 {
     this.Salao = Salao;
 }
Beispiel #6
0
        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];
        }