示例#1
0
        private void Troca(int primeiroIndice, int segundoIndice)
        {
            Caminho temp = _elementos[primeiroIndice];

            _elementos[primeiroIndice] = _elementos[segundoIndice];
            _elementos[segundoIndice]  = temp;
        }
        /// <summary>
        /// Função principal de busca
        /// </summary>
        /// <returns></returns>
        private int[] FindSolution()
        {
            Node           inicio = new Node(null, initState, 0, null);
            PQ             open   = new PQ();
            List <Caminho> closed = new List <Caminho>();


            int     euristicaInicio = Euristica(inicio);
            Caminho n = new Caminho(inicio, euristicaInicio, 0);

            open.Add(n);
            closed.Add(n);
            while (!open.EstaVazio())
            {
                foreach (Caminho m in GetSucessors(n.N, euristicaInicio))
                {
                    if (!closed.Contains(m))
                    {
                        open.Add(m);
                    }
                }
                n = open.Pop();
                closed.Add(n);
                if (TargetFound(n.N))
                {
                    break;
                }
            }

            return(BuildAnswer(n.N));;
        }
        public void DesenharCaminho(Caminho caminho, Color cor)
        {
            using (var paint = new SKPaint())
            {
                paint.Color       = cor.ToSKColor();
                paint.Style       = SKPaintStyle.Fill;
                paint.IsAntialias = true;

                using (var path = new SKPath())
                {
                    foreach (var acao in caminho.Acoes)
                    {
                        if (acao is Mover mover)
                        {
                            path.MoveTo(mover.Posicao.X, mover.Posicao.Y);
                        }
                        else if (acao is Arco arco)
                        {
                            path.ArcTo(arco.Raio, new SKPoint(arco.Posicao.X, arco.Posicao.Y));
                        }
                        else if (acao is Fechar)
                        {
                            path.Close();
                        }
                    }

                    _canvas.DrawPath(path, paint);
                }
            }
        }
示例#4
0
 public void Add(Caminho elemento)
 {
     More();
     _elementos[size] = elemento;
     size++;
     HeapUp();
 }
示例#5
0
        public JsonResult Edit(Foto Foto, HttpPostedFileBase file)
        {
            var Retorno = new RetornoJson();

            if (Foto.NomeFoto == null)
            {
                Retorno.Mensagem += "<span> Digite o Nome</span>";
            }
            //editar staus , categoria foto e funcionario
            if (Retorno.Mensagem != "")
            {
                return(Json(Retorno, JsonRequestBehavior.AllowGet));
            }

            if (file != null)
            {
                string nome = "Foto-" + NomeArquivo.GerarNomeArquivo(file.FileName);
                string path = Path.Combine(Server.MapPath(Caminho.Foto()), Path.GetFileName(nome));
                file.SaveAs(path);
                Foto.Imagem = nome;
            }

            var bdFoto = new FotoRepositorioEF(contexto);

            bdFoto.Atualizar(Foto);
            bdFoto.SalvarTodos();

            Retorno.Mensagem += "<span> Editado com sucesso</span>";

            Retorno.Sucesso      = true;
            Retorno.Redirecionar = true;
            Retorno.Link         = "/Admin/Foto/Index";

            return(Json(Retorno, JsonRequestBehavior.AllowGet));
        }
示例#6
0
 private void AdicionarCaminho(Caminho c)
 {
     if (c.Origem != c.Destino)
     {
         _caminhos.Add(c);
     }
 }
示例#7
0
        /**
         * Método recursivo que retorna todos os caminhos entre as cidades que possuem o Id equivalentes aos parâmetros.
         * Cada passo do caminho em questão é armazenado na pilhaDeMovimentos de movimentos "pilhaMovimento".
         * Por fim, se chegou ao destino, a pilhaDeMovimentos é armazenada na variável "caminhosEncontrados", representando um dos caminhos possíveis
         * O método acaba quando todos os caminhos possíveis são percorridos.
         */
        public List <Caminho> BuscarCaminhos(int idCidadeOrigem, int idCidadeDestino)
        {
            for (int i = 0; i < QtdCidades; i++)
            {
                if ((MatrizAdjacencia[idCidadeOrigem, i] != null) && (!jaPassou[i]))
                {
                    pilhaMovimento.Empilhar(new Movimento(idCidadeOrigem, i));
                    jaPassou[i] = true;

                    if (i == idCidadeDestino) // se chegou ao destino
                    {
                        Caminho novoCaminho = new Caminho();
                        novoCaminho.Movimentos = pilhaMovimento.Clone();
                        caminhosEncontrados.Add(novoCaminho);
                        pilhaMovimento.Desempilhar(); // busca novos caminhos
                        jaPassou[i] = false;
                    }
                    else
                    {
                        BuscarCaminhos(i, idCidadeDestino); // backtracking
                    }
                }
            }

            if (!pilhaMovimento.EstaVazia)
            {
                pilhaMovimento.Desempilhar();
                jaPassou[idCidadeOrigem] = false;
            }
            return(caminhosEncontrados);
        }
示例#8
0
 public void More()
 {
     if (size == tamanhoTotal)
     {
         tamanhoTotal *= 2;
         Caminho[] temp = new Caminho[tamanhoTotal];
         _elementos.CopyTo(temp, 0);
         _elementos = temp;
     }
 }
示例#9
0
        public void CriarOuAlterarTabela(List <Ponto> ListPonto, string NomeArquivo)
        {
            XmlSerializer parse = new XmlSerializer(typeof(Ponto[]));

            using (var writer = new StreamWriter(Caminho.CaminhoXML(NomeArquivo)))
            {
                parse.Serialize(writer, ListPonto.ToArray());
                writer.Close();
            }
        }
        private void Caminho_Leave(object sender, EventArgs e)
        {
            if (!Directory.Exists(Caminho.Text))
            {
                Caminho.Select(0, Caminho.Text.Length);
                Caminho.Focus();

                MessageBox.Show("Caminho inválido.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#11
0
文件: Program.cs 项目: murvlous/fsa
        static void Main(string[] args)
        {
            Rua r1 = new Rua("Rua 1", 10000);
            Rua r2 = new Rua("Rua 2", 10000);
            Rua r3 = new Rua("Rua 3", 10000);
            Rua r4 = new Rua("Rua 4", 10000);

            Caminho caminho1 = new Caminho();
            caminho1.Add(r1);
            caminho1.Add(r2);

            Caminho caminho2 = new Caminho();
            caminho2.Add(r1);
            caminho2.Add(r4);

            Cruzamento cz1 = new Cruzamento(r1, r2, r3, r4);
            Controlador ct1 = new Controlador(cz1);

            Carro c1 = new Carro("Carro 1", caminho1);
            c1.Velocidade = 180;
            
            c1.TrocaDeRua += new Carro.CarroTrocaHandler(c1_TrocaDeRua);
            c1.TerminoCaminho += new Carro.CarroTerminoHandler(c1_TerminoCaminho);
            c1.AguardandoSemaforo += new Carro.CarroAguardandoHandler(c1_AguardandoSemaforo);
            c1.ImpedimentoDeProgresso += new Carro.CarroImpedidoHandler(c1_ImpedimentoDeProgresso);
            c1.InicioCaminho += new Carro.CarroInicioHandler(c1_InicioCaminho);

            Carro c2 = new Carro("Carro 2", caminho2);
            c2.Velocidade = 360;

            c2.TrocaDeRua += new Carro.CarroTrocaHandler(c1_TrocaDeRua);
            c2.TerminoCaminho += new Carro.CarroTerminoHandler(c1_TerminoCaminho);
            c2.AguardandoSemaforo += new Carro.CarroAguardandoHandler(c1_AguardandoSemaforo);
            c2.ImpedimentoDeProgresso += new Carro.CarroImpedidoHandler(c1_ImpedimentoDeProgresso);
            c2.InicioCaminho += new Carro.CarroInicioHandler(c1_InicioCaminho);

            c1.Iniciar();

            while (carros > 0)
            {
                ct1.Avancar();

                if (tempo == 26)
                {
                    c2.Iniciar();
                }

                c1.Mover();
                c2.Mover();

                tempo++;
            }

            Console.ReadLine();
        }
示例#12
0
        /// <summary>
        /// Separa nomes dos diretórios
        /// </summary>
        private void SepararNomesDiretorios()
        {
            Diretorios = Caminho.Split('/');

            foreach (var var in Diretorios)
            {
                Caminho = DiretorioCompleto + DiretorioParametrizado + AuxDiretorio + var;

                //Serve para auxiliar a colocar um diretorio dentro do outro
                AuxDiretorio += var + "\\";
            }
        }
示例#13
0
        public GrafoCaminhoViewModel(Grafo grafo, double escala, string origem, string destino) : base(grafo, escala)
        {
            _origem  = origem;
            _destino = destino;
            Dijkstra dijkstra = new Dijkstra();

            dijkstra.Monta(grafo, origem);
            Caminho caminho = new Caminho();

            _listaCaminho = caminho.calcula_caminho(grafo.get_vertice(destino));
            _custo        = grafo.get_vertice(destino).get_distancia().ToString("0.00");
        }
示例#14
0
        public Caminho Pop()
        {
            if (EstaVazio())
            {
                throw new IndexOutOfRangeException();
            }

            Caminho result = _elementos[0];

            _elementos[0] = _elementos[size - 1];
            size--;
            HeapDown();
            return(result);
        }
示例#15
0
        private void AddTrecho(string origem, string destino, decimal tempo)
        {
            var x2 = _caminhos.Where(x => x.Steps.Any(y => y.Destino == origem || y.Origem == destino)).ToList();

            var caminho = new Caminho();

            caminho.AddStep(origem, destino, tempo);

            AdicionarCaminho(caminho);

            // existem caminhos que podem começar antes, depois ou "no meio" destes caminhos já criados
            foreach (var x in x2)
            {
                MontarTodosCaminhos(x, origem, destino, tempo);
            }
        }
示例#16
0
        static void Main()
        {
            if (!Directory.Exists(Caminho.PastaXML))
            {
                Directory.CreateDirectory(Caminho.PastaXML);
            }

            if (!File.Exists(Caminho.CaminhoXML()))
            {
                (new Ponto_BLL()).CriarTabela();
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.ThreadException += Application_ThreadException;
            Application.Run(new frmPonto());
        }
示例#17
0
        /// <summary>
        /// Se posição é maior que -1 é porque tem "!" e portando tem arquivo txt para criar e não é um link. Senão é um link.
        /// </summary>
        private void VerificarTextoLink()
        {
            //Recupera o nome do arquivo TXT na Tag e retira ele da variavel caminho
            Posicao = Caminho.IndexOf("!");

            if (Posicao > -1)
            {
                NovoArquivoTxt = Caminho.Substring(Posicao + 1);
                Caminho        = Caminho.Substring(0, Posicao);
                NomearExtencaoDiretorio(ConfigurationManager.AppSettings["ExtencaoTXT"], ConfigurationManager.AppSettings["RaizDiretorioParametrizado"]);
            }
            else
            {
                NovoArquivoTxt = Arquivo.ReadLine();
                NomearExtencaoDiretorio(ConfigurationManager.AppSettings["ExtencaoURL"], ConfigurationManager.AppSettings["RaizDiretorioLinksParametrizado"]);
            }
        }
示例#18
0
        private void MontarTodosCaminhos(Caminho caminhoBase, string origem, string destino, decimal tempo)
        {
            // fazer analise combinatoria mesclando os itens.

            foreach (var item in caminhoBase.Steps.OrderBy(x => x.Order))
            {
                if (item.Origem == destino)
                {
                    var t = caminhoBase.Steps.Where(x => x.Order >= item.Order).ToList(); // t = temp;
                    CriarComNovaOrigem(t, origem, tempo);
                }

                if (item.Destino == origem)
                {
                    var t = caminhoBase.Steps.Where(x => x.Order <= item.Order).ToList(); // t = temp;
                    // Ampliando a rota
                    CriarComNovaDestino(t, destino, tempo);
                }
            }
        }
示例#19
0
        static void PrepararMapa()
        {
            Rua rua_a = new Rua("A", 2 * tamanho_bloco);
            Rua rua_b = new Rua("B", 3 * tamanho_bloco);
            Rua rua_c = new Rua("C", 4 * tamanho_bloco);
            Rua rua_d = new Rua("D", 4 * tamanho_bloco);
            Rua rua_e = new Rua("E", 3 * tamanho_bloco);
            Rua rua_f = new Rua("F", 3 * tamanho_bloco);
            Rua rua_g = new Rua("G", 4 * tamanho_bloco);
            Rua rua_h = new Rua("H", 2 * tamanho_bloco);
            Rua rua_i = new Rua("I", 5 * tamanho_bloco);
            Rua rua_j = new Rua("J", 1 * tamanho_bloco);
            Rua rua_k = new Rua("K", 5 * tamanho_bloco);
            Rua rua_l = new Rua("L", 5 * tamanho_bloco);

            Cruzamento cruzamento_1 = new Cruzamento(rua_a, rua_d, rua_b, rua_c, true);
            Cruzamento cruzamento_2 = new Cruzamento(rua_d, rua_f, rua_e, rua_g, true);
            Cruzamento cruzamento_3 = new Cruzamento(rua_c, rua_l, rua_h, null, false);
            Cruzamento cruzamento_4 = new Cruzamento(rua_h, rua_j, rua_i, null, false);
            Cruzamento cruzamento_5 = new Cruzamento(rua_g, rua_k, rua_j, null, true);

            Controlador controlador_1 = new Controlador(cruzamento_1);
            Controlador controlador_2 = new Controlador(cruzamento_2);
            Controlador controlador_5 = new Controlador(cruzamento_5);

            Caminho caminho_a = new Caminho("A", rua_b, rua_d, rua_e);
            Caminho caminho_b = new Caminho("B", rua_b, rua_c, rua_h, rua_i);
            Caminho caminho_c = new Caminho("C", rua_a, rua_c, rua_h, rua_i);
            Caminho caminho_d = new Caminho("D", rua_k, rua_g, rua_e);

            mapa = new Mapa(cruzamento_1, cruzamento_2, cruzamento_3, cruzamento_4, cruzamento_5);

            mapa.Controladores.Add(controlador_1);
            mapa.Controladores.Add(controlador_2);
            mapa.Controladores.Add(controlador_5);

            mapa.Caminhos.Add(caminho_a);
            mapa.Caminhos.Add(caminho_b);
            mapa.Caminhos.Add(caminho_c);
            mapa.Caminhos.Add(caminho_d);
        }
示例#20
0
        public List <Ponto> CarregaRegistro(string NomeArquivo)
        {
            XmlSerializer ser        = new XmlSerializer(typeof(Ponto[]));
            List <Ponto>  ListPontos = new List <Ponto>();

            if (File.Exists(Caminho.CaminhoXML(NomeArquivo)))
            {
                using (XmlReader reader = XmlReader.Create(Caminho.CaminhoXML(NomeArquivo)))
                {
                    foreach (Ponto Item in (Ponto[])ser.Deserialize(reader))
                    {
                        Item.Ferias = Item.Ferias != 0 ? Item.Ferias : 'N';
                        Item.Folga  = Item.Folga != 0 ? Item.Folga : 'N';

                        ListPontos.Add(Item);
                    }
                }
            }

            return(ListPontos);
        }
示例#21
0
        private void CriarComNovaDestino(List <Step> list, string destino, decimal tempo)
        {
            if (list.Any(x => x.Destino == destino))
            {
                return;
            }

            for (int i = 0; i <= list.Count - 1; i++)
            {
                var c = new Caminho();

                for (int y = 0; y <= list.Count - 1; y++)
                {
                    c.AddStep(list[y].Origem, list[y].Destino, list[y].Tempo);
                }

                c.AddStep(list[i].Destino, destino, tempo);

                AdicionarCaminho(c);
            }
        }
示例#22
0
        private void CriarComNovaOrigem(List <Step> list, string origem, decimal tempo)
        {
            if (list.Any(x => x.Origem == origem))
            {
                return;
            }

            for (int i = 0; i <= list.Count - 1; i++)
            {
                var c = new Caminho();

                c.AddStep(origem, list[i].Destino, list[i].Tempo);

                for (int y = 0; y < i; y++)
                {
                    c.AddStep(list[i].Destino, list[y].Origem, list[y].Tempo);
                }

                AdicionarCaminho(c);
            }
        }
示例#23
0
        public JsonResult Create(Foto Foto, HttpPostedFileBase file)
        {
            var Retorno = new RetornoJson();

            if (Foto.NomeFoto == null)
            {
                Retorno.Mensagem += "<span> Digite o Nome</span>";
            }
            //validar status , categoria e funcionario

            if (Retorno.Mensagem != "")
            {
                return(Json(Retorno, JsonRequestBehavior.AllowGet));
            }

            if (file != null)
            {
                string nome = "Foto-" + NomeArquivo.GerarNomeArquivo(file.FileName);
                string path = Path.Combine(Server.MapPath(Caminho.Foto()), Path.GetFileName(nome));
                file.SaveAs(path);
                Foto.Imagem = nome;
            }

            try
            {
                Foto.DataFoto = DateTime.Now;
                var bdFoto = new FotoRepositorioEF(contexto);
                bdFoto.Adicionar(Foto);
                bdFoto.SalvarTodos();

                Retorno.Mensagem    += "<span> Cadastrado com sucesso</span>";
                Retorno.Sucesso      = true;
                Retorno.Redirecionar = true;
                Retorno.Link         = "/Admin/Foto/Index";
            }catch (Exception e)
            {
                Retorno.Mensagem += "<span> Foto não cadastrado.</span>";
            }
            return(Json(Retorno, JsonRequestBehavior.AllowGet));
        }
示例#24
0
        public void Teste_Caminho()
        {
            //arrange:
            string   pastaArquivo = @"C:\Trabalho\TestePromob\JSONs";
            string   nomeArquivo  = "Grafo1.json";
            Grafo    grafo        = new Grafo(false, pastaArquivo + @"\" + nomeArquivo);
            string   origem       = "A";
            string   destino      = "C";
            Dijkstra dijkstra     = new Dijkstra();

            dijkstra.Monta(grafo, origem);
            string dist = "30";

            //act:
            Caminho       caminho      = new Caminho();
            List <string> listaCaminho = caminho.calcula_caminho(grafo.get_vertice(destino));


            //assert:
            Assert.IsNotNull(listaCaminho);
            Assert.AreEqual(grafo.get_vertice(destino).get_distancia().ToString("0"), "30");
        }
 public ItemTabela(string nomeDoVector, Caminho vetor, int minimaDistancia)
 {
     this.NomeDoVector    = nomeDoVector;
     this.Vetor           = vetor;
     this.MinimaDistancia = minimaDistancia;
 }
示例#26
0
        static void MainOld(string[] args)
        {
            Rua r1 = new Rua("Rua 1", 10000);
            Rua r2 = new Rua("Rua 2", 10000);
            Rua r3 = new Rua("Rua 3", 10000);
            Rua r4 = new Rua("Rua 4", 10000);

            Caminho caminho1 = new Caminho();

            caminho1.Add(r1);
            caminho1.Add(r2);

            Caminho caminho2 = new Caminho();

            caminho2.Add(r1);
            caminho2.Add(r4);

            Cruzamento  cz1 = new Cruzamento(r1, r2, r3, r4);
            Controlador ct1 = new Controlador(cz1);

            Carro c1 = new Carro("Carro 1", caminho1, 0.05f, 80);

            /*c1.TrocaDeRua += new Carro.CarroTrocaHandler(c1_TrocaDeRua);
             * c1.AguardandoSemaforo += new Carro.CarroAguardandoHandler(c1_AguardandoSemaforo);
             * c1.ImpedimentoDeProgresso += new Carro.CarroImpedidoHandler(c1_ImpedimentoDeProgresso);*/
            c1.TerminoCaminho += new Carro.CarroTerminoHandler(c1_TerminoCaminho);
            c1.InicioCaminho  += new Carro.CarroInicioHandler(c1_InicioCaminho);

            Carro c2 = new Carro("Carro 2", caminho2, 0.055f, 120);

            /*c2.TrocaDeRua += new Carro.CarroTrocaHandler(c1_TrocaDeRua);
             * c2.AguardandoSemaforo += new Carro.CarroAguardandoHandler(c1_AguardandoSemaforo);
             * c2.ImpedimentoDeProgresso += new Carro.CarroImpedidoHandler(c1_ImpedimentoDeProgresso);*/
            c2.TerminoCaminho += new Carro.CarroTerminoHandler(c1_TerminoCaminho);
            c2.InicioCaminho  += new Carro.CarroInicioHandler(c1_InicioCaminho);

            c1.Iniciar();
            carros = 1;

            while (carros > 0)
            {
                ct1.Atuar();

                if (TempoDoSistema.Valor == 20)
                {
                    c2.Iniciar();
                }

                c1.Mover();
                c2.Mover();

                Console.Clear();
                ExibeCarros(c1, c2);
                ExibeSemaforos(cz1);
                //ExibeSensores(cz1);

                TempoDoSistema.Incrementar();
                Thread.Sleep(100);
            }

            //DesenhaMapa();

            Console.ReadLine();
        }
示例#27
0
        private List <Caminho> GetSucessors(Node n, int valorInicio)
        {
            List <Caminho> sucessores = new List <Caminho>();
            //tamanho de cada linha do quebra-cabeça
            int lateral = (int)Math.Sqrt(target.Length);
            //posicao atual que pode ser colocada uma peca
            int posicao = Array.IndexOf(n.Info, 0), gcost, hcost;

            int[]   sup;
            Caminho c;
            Node    a;

            //top
            if (posicao > lateral)
            {
                sup                    = (int[])n.Info.Clone();
                sup[posicao]           = sup[posicao - lateral];
                sup[posicao - lateral] = 0;
                if (n.Nivel > 0 && !Compare(sup, n.Parent.Info))
                {
                    a     = new Node(sup[posicao].ToString(), sup, n.Nivel + 1, n);
                    gcost = Euristica(a);
                    hcost = valorInicio - gcost;
                    c     = new Caminho(a, gcost, hcost);
                    sucessores.Add(c);
                }
                else if (n.Nivel == 0)
                {
                    a     = new Node(sup[posicao].ToString(), sup, n.Nivel + 1, n);
                    gcost = Euristica(a);
                    hcost = valorInicio - gcost;
                    c     = new Caminho(a, gcost, hcost);
                    sucessores.Add(c);
                }
            }
            //left
            if (posicao % lateral != 0)
            {
                sup              = (int[])n.Info.Clone();
                sup[posicao]     = sup[posicao - 1];
                sup[posicao - 1] = 0;
                if (n.Nivel > 0 && !Compare(sup, n.Parent.Info))
                {
                    a     = new Node(sup[posicao].ToString(), sup, n.Nivel + 1, n);
                    gcost = Euristica(a);
                    hcost = valorInicio - gcost;
                    c     = new Caminho(a, gcost, hcost);
                    sucessores.Add(c);
                }
                else if (n.Nivel == 0)
                {
                    a     = new Node(sup[posicao].ToString(), sup, n.Nivel + 1, n);
                    gcost = Euristica(a);
                    hcost = valorInicio - gcost;
                    c     = new Caminho(a, gcost, hcost);
                    sucessores.Add(c);
                }
            }
            //right
            if (posicao % lateral != lateral - 1)
            {
                sup              = (int[])n.Info.Clone();
                sup[posicao]     = sup[posicao + 1];
                sup[posicao + 1] = 0;
                if (n.Nivel > 0 && !Compare(sup, n.Parent.Info))
                {
                    a     = new Node(sup[posicao].ToString(), sup, n.Nivel + 1, n);
                    gcost = Euristica(a);
                    hcost = valorInicio - gcost;
                    c     = new Caminho(a, gcost, hcost);
                    sucessores.Add(c);
                }
                else if (n.Nivel == 0)
                {
                    a     = new Node(sup[posicao].ToString(), sup, n.Nivel + 1, n);
                    gcost = Euristica(a);
                    hcost = valorInicio - gcost;
                    c     = new Caminho(a, gcost, hcost);
                    sucessores.Add(c);
                }
            }
            //bottom
            if (posicao < target.Length - lateral)
            {
                sup                    = (int[])n.Info.Clone();
                sup[posicao]           = sup[posicao + lateral];
                sup[posicao + lateral] = 0;
                if (n.Nivel > 0 && !Compare(sup, n.Parent.Info))
                {
                    a     = new Node(sup[posicao].ToString(), sup, n.Nivel + 1, n);
                    gcost = Euristica(a);
                    hcost = valorInicio - gcost;
                    c     = new Caminho(a, gcost, hcost);
                    sucessores.Add(c);
                }
                else if (n.Nivel == 0)
                {
                    a     = new Node(sup[posicao].ToString(), sup, n.Nivel + 1, n);
                    gcost = Euristica(a);
                    hcost = Math.Abs(valorInicio - gcost);
                    c     = new Caminho(a, gcost, hcost);
                    sucessores.Add(c);
                }
            }
            return(sucessores);
        }
示例#28
0
        public List <Caminho> BuscarCaminhos(int idCidadeOrigem, int idCidadeDestino)
        {
            int  idCidadeAtual, idSaidaAtual;
            bool achouCaminho = false, naoTemSaida = false;

            bool[] jaPassou = new bool[QtdCidades];

            for (int indice = 0; indice < QtdCidades; indice++)
            {
                jaPassou[indice] = false;
            }

            idCidadeAtual = idCidadeOrigem;
            idSaidaAtual  = 0;
            while (!naoTemSaida)
            {
                naoTemSaida = (idCidadeAtual == idCidadeOrigem && idSaidaAtual == QtdCidades && pilhaAuxiliar.EstaVazia);
                if (!naoTemSaida)
                {
                    while ((idSaidaAtual < QtdCidades) && !achouCaminho)
                    {
                        if (MatrizAdjacencia[idCidadeAtual, idSaidaAtual] == null)
                        {
                            idSaidaAtual++;
                        }

                        else if (jaPassou[idSaidaAtual])
                        {
                            idSaidaAtual++;
                        }

                        else if (idSaidaAtual == idCidadeDestino)
                        {
                            Movimento movimento = new Movimento(idCidadeAtual, idSaidaAtual);
                            pilhaAuxiliar.Empilhar(movimento);
                            achouCaminho = true;
                        }
                        else
                        {
                            Movimento movimento = new Movimento(idCidadeAtual, idSaidaAtual);
                            pilhaAuxiliar.Empilhar(movimento);
                            jaPassou[idCidadeAtual] = true;
                            idCidadeAtual           = idSaidaAtual;
                            idSaidaAtual            = 0;
                        }
                    }
                }
                if (!achouCaminho)
                {
                    if (!pilhaAuxiliar.EstaVazia)
                    {
                        jaPassou[idCidadeAtual] = false;
                        Movimento ultimoMovimento = pilhaAuxiliar.Desempilhar();
                        idSaidaAtual  = ultimoMovimento.IdCidadeDestino;
                        idCidadeAtual = ultimoMovimento.IdCidadeOrigem;
                        idSaidaAtual++;
                    }
                }
                if (achouCaminho)
                {
                    Caminho novoCaminho = new Caminho();
                    novoCaminho.Movimentos = pilhaAuxiliar.Clone();
                    caminhosEncontrados.Add(novoCaminho);
                    achouCaminho = false;
                    pilhaAuxiliar.Desempilhar();

                    for (int i = 0; i < QtdCidades; i++)
                    {
                        jaPassou[i] = false;
                    }

                    idSaidaAtual++;
                }
            }
            return(caminhosEncontrados);
        }
 public Rota(int peso, Caminho localDeChegada)
 {
     this.Peso           = peso;
     this.LocalDeChegada = localDeChegada;
 }
示例#30
0
 public CursoController()
 {
     bdCurso        = CursoAplicacaoConstrutor.CursoAplicacaoEF();
     bdCorpo        = CorpoDocenteAplicacaoConstrutor.CorpoDocenteAplicacaoEF();
     caminhoArquivo = Caminho.Curso();
 }