コード例 #1
0
        public override IComponente EscolheMelhorComponente(List <IComponente> Componentes)
        {
            Acesso  fimRota = (Acesso)Viagen.Componentes.LastOrDefault();// cidade atual
            Acesso  temp    = new Acesso();
            Acesso  menor   = new Acesso();
            Boolean cidVisit;

            foreach (Acesso acesso in Componentes)
            {
                // quando não tiver inserido o primeiro componente na solução
                if (solucaoIn == false)
                {
                    foreach (Acesso a in Componentes)
                    {
                        if (menor.km == -1 && a.cidPartida == rota.cidPartida || (a.km < menor.km && a.cidPartida == rota.cidPartida))
                        {
                            menor = a;
                        }
                    }
                }
                // depois que inserir o primeiro componente na solução
                else
                {
                    if (acesso.cidPartida == fimRota.cidDestino && acesso.cidDestino != rota.cidPartida)
                    {
                        if (menor.km == -1 || acesso.km < menor.km)
                        {
                            // verifica se cidade ja foi visitada
                            cidVisit = false;
                            foreach (Acesso tmp in Viagen.Componentes)
                            {
                                if (tmp.cidPartida == acesso.cidDestino)
                                {
                                    cidVisit = true;
                                    break;
                                }
                            } // encerra verificação de cidade visitada

                            // se a cidade não foi visitada e a distancia for menor troca o valor a ser retornado
                            if (cidVisit == false)
                            {
                                menor = acesso;
                            }
                        }
                    }
                    else if (acesso.cidDestino == rota.cidPartida)
                    {
                        temp = acesso;
                    }
                }
            }
            // caso não haja outra cidade a ser visitada manda a aresta que encerra a rota.
            if (menor.km == -1 && solucaoIn == true)
            {
                menor = temp;
            }

            solucaoIn = true;
            return(menor);
        }
コード例 #2
0
        public override IComponente EscolheMelhorComponente(List<IComponente> Componentes)
        {
            Acesso fimRota = (Acesso)Viagen.Componentes.LastOrDefault();// cidade atual
            Acesso temp = new Acesso();
            Acesso menor = new Acesso();
            Boolean cidVisit;

            foreach (Acesso acesso in Componentes)
            {
                // quando não tiver inserido o primeiro componente na solução
                if (solucaoIn == false)
                {
                    foreach (Acesso a in Componentes)
                    {
                        if (menor.km == -1 && a.cidPartida == rota.cidPartida || (a.km < menor.km && a.cidPartida == rota.cidPartida))
                            menor = a;
                    }
                }
                    // depois que inserir o primeiro componente na solução
                else
                {
                    if (acesso.cidPartida == fimRota.cidDestino && acesso.cidDestino != rota.cidPartida)
                    {
                        if (menor.km == -1 || acesso.km < menor.km)
                        {
                            // verifica se cidade ja foi visitada
                            cidVisit = false;
                            foreach (Acesso tmp in Viagen.Componentes)
                            {
                                if (tmp.cidPartida == acesso.cidDestino)
                                {
                                    cidVisit = true;
                                    break;
                                }
                            } // encerra verificação de cidade visitada

                            // se a cidade não foi visitada e a distancia for menor troca o valor a ser retornado
                            if (cidVisit == false)
                                menor = acesso;
                        }
                    }
                    else if (acesso.cidDestino == rota.cidPartida)
                        temp = acesso;
                }
            }
                // caso não haja outra cidade a ser visitada manda a aresta que encerra a rota.
            if (menor.km == -1 && solucaoIn == true)
                menor = temp;

            solucaoIn = true;
            return menor;
        }
コード例 #3
0
        public void AddComponente(IComponente Componente)
        {
            if (Componente == null)
            {
                return;
            }
            Acesso aresta = (Acesso)Componente;

            if (!destPossiveis.Contains(Componente))
            {
                destPossiveis.Add(aresta);
            }
        }
コード例 #4
0
        public override bool VerificaSolucaoCompleta()
        {
            Acesso fimRota = new Acesso();
            Acesso inRota  = new Acesso();

            if (solucaoIn == true)
            {
                fimRota = (Acesso)rota.Componentes.LastOrDefault();// ultimo destino
                if (fimRota.cidDestino == rota.cidPartida)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
コード例 #5
0
        public override bool VerificaSolucaoCompleta()
        {
            Acesso fimRota = new Acesso();
            Acesso inRota = new Acesso();

            if (solucaoIn == true)
            {
                fimRota = (Acesso)rota.Componentes.LastOrDefault();// ultimo destino
                if (fimRota.cidDestino == rota.cidPartida)
                    return true;
                else
                    return false;
            }
            else
                return false;
        }