public static void Questao6(List <Rotas> rotas)
        {
            List <Rotas> viagensComecandoC = new List <Rotas>();
            int          count             = 0;

            //monta as listas das rotas começadas e terminadas em C
            foreach (var item in rotas)
            {
                if (item.rota.StartsWith("C"))
                {
                    viagensComecandoC.Add(item);
                }
            }

            //  define o numero das rotas possiveis
            List <Rotas> rotapossivel = new List <Rotas>();
            int          flag         = 0;

            foreach (var item in viagensComecandoC)
            {
                Rotas rotaAnterior = item;
                if (flag == 0)
                {
                    rotapossivel.Add(item);
                }
                foreach (var item2 in rotas)
                {
                    //se a proxima rota existir
                    if (proximaRota(rotas, rotaAnterior, rotaAnterior.rota.Substring(item.rota.Count() - 1)) != null)
                    {
                        //se a rota não exister na lisa de rota ainda, entra no if
                        if (rotapossivel.Contains(rotaAnterior) == true)
                        {
                            var b = proximaRota(rotas, rotaAnterior, rotaAnterior.rota.Substring(item.rota.Count() - 1));
                            //se a proxima rota, já existir na rota, para o looop.
                            if (rotapossivel.Contains(b))
                            {
                                break;
                            }
                            rotapossivel.Add(b);
                            rotaAnterior = b;
                            //verifica fim da rota com rotas terminada em C
                            if (b.rota.EndsWith("C"))
                            {
                                break;
                            }
                        }
                    }
                }
                if (rotapossivel.Count <= 3)
                {
                    count++;
                }
                rotapossivel = new List <Rotas>();
            }
            Console.WriteLine(string.Format("#6) O número de viagens começando em C e terminando em C com no máximo 3 paradas: {0}", count));
        }
        private static void Questao8(List <Rotas> rotas)
        {
            List <Rotas> viagensComecandoC = new List <Rotas>();
            List <int>   menorRota         = new List <int>();

            //monta as listas das rotas começadas em A e terminadas em C
            foreach (var item in rotas)
            {
                if (item.rota.StartsWith("A"))
                {
                    viagensComecandoC.Add(item);
                }
            }

            //  define o numero das rotas possiveis
            List <Rotas> rotapossivel = new List <Rotas>();
            int          flag         = 0;

            foreach (var item in viagensComecandoC)
            {
                Rotas rotaAnterior = item;
                if (flag == 0)
                {
                    rotapossivel.Add(item);
                }
                foreach (var item2 in rotas)
                {
                    //se a proxima rota existir
                    if (proximaRota(rotas, rotaAnterior, rotaAnterior.rota.Substring(item.rota.Count() - 1)) != null)
                    {
                        //se a rota não exister na lisa de rota ainda, entra no if
                        if (rotapossivel.Contains(rotaAnterior) == true)
                        {
                            var b = proximaRota(rotas, rotaAnterior, rotaAnterior.rota.Substring(item.rota.Count() - 1));
                            //se a proxima rota, já existir na rota, para o looop.
                            if (rotapossivel.Contains(b))
                            {
                                break;
                            }
                            rotapossivel.Add(b);
                            rotaAnterior = b;
                            //verifica fim da rota com rotas terminada em C
                            if (b.rota.EndsWith("C"))
                            {
                                menorRota.Add(rotapossivel.Sum(x => x.distancia));
                                break;
                            }
                        }
                    }
                }
                rotapossivel = new List <Rotas>();
            }
            Console.WriteLine(string.Format("#8) O tamanho da menor viagem(em termos de distância) de A para C: {0}", menorRota.Min()));
        }
예제 #3
0
        public VerRotasViewModel(VerRotas pai)
        {
            parentPage = pai;

            // apagar rota selecionada
            this.ApagarCommand = new Command(async() =>
            {
                // verifica se existe rota selecionada na lista de rotas
                if (parentPage.RotaSelecionada == null)
                {
                    DependencyService.Get <IMessage>().ShortAlert("Nenhuma rota foi selecionada.");
                    return;
                }

                // confirma eliminação da rota
                var resposta = await parentPage.DisplayAlert("Apaga Rota", "Confirma eliminação da rota selecionada?", "Sim", "Não");
                if (resposta)
                {
                    if (RotasBD.ApagaRota(parentPage.RotaSelecionada.RotaId))
                    {
                        // apaga rota da lista de rotas
                        Rotas.Remove(parentPage.RotaSelecionada);
                        InformaAlteracao("Rotas");
                    }
                    else
                    {
                        DependencyService.Get <IMessage>().ShortAlert("Erro na eliminação da rota!");
                    }
                }
            });

            // ver rota selecionada no mapa
            this.VerCommand = new Command(async() =>
            {
                // verifica se existe rota selecionada na lista de rotas
                if (parentPage.RotaSelecionada == null)
                {
                    DependencyService.Get <IMessage>().ShortAlert("Nenhuma rota foi selecionada.");
                    return;
                }

                // verifica se existem coordenadas na rota selecionada
                if ((parentPage.RotaSelecionada.Coordenadas == null) ||
                    (parentPage.RotaSelecionada.Coordenadas.Count < 2))
                {
                    DependencyService.Get <IMessage>().ShortAlert("Rota selecionada não possui nenhum trajeto.");
                    return;
                }

                // mostra rota no mapa
                await App.NavegarParaPagina(new VerRotaNoMapa(parentPage.RotaSelecionada.Coordenadas));
            });
        }
        public static Rotas ProximaRotaCurta(List <Rotas> rotasAtual, Rotas rotaAnterior, string Final, List <Rotas> rotapossivel)
        {
            List <Rotas> rota = new List <Rotas>();

            foreach (var item in rotasAtual.Except(rotapossivel))
            {
                if (item.rota.StartsWith(Final))
                {
                    rota.Add(item);
                }
            }
            return(rota.FirstOrDefault(x => x.distancia == rota.Min(r => r.distancia)));
        }
        //pega a proxima rota, de acordo com o fim da rota enviada
        public static Rotas proximaRota(List <Rotas> rotas, Rotas rota, string Final)
        {
            Rotas a = null;

            foreach (var item in rotas)
            {
                if (item.rota.StartsWith(Final))
                {
                    a = item;
                    break;
                }
            }

            return(a);
        }