Beispiel #1
0
        /*AGM ordenada por distancia --- Kruskal */
        private GrafoNaoDirigido ArvoreGeradoraMinima()
        {
            List <Arestas>   aux = arestas.OrderBy(x => x.Distancia).ToList();
            GrafoNaoDirigido AGM = new GrafoNaoDirigido();

            foreach (var vertice in vertices)
            {
                AGM.inserirVertice(vertice);
            }

            int incluidas = 0;
            int cont      = 0;

            foreach (var aresta in arestas)
            {
                AGM.inserirRota(aresta);

                if (AGM.ExisteCiclo())
                {
                    AGM.retirarRota(aresta);
                    AGM.temCiclo = false;
                }
                else
                {
                    incluidas++;

                    if (incluidas >= vertices.Count() - 1)
                    {
                        break;
                    }
                }
            }

            return(AGM);
        }
Beispiel #2
0
        /*construtor da classe */
        public BuscaEmProfundidade(GrafoNaoDirigido grafo)
        {
            this.grafo = grafo;
            int n = this.grafo.numVertice();

            d          = new int[n];
            t          = new int[n];
            antecessor = new int[n];
        }
Beispiel #3
0
        /*rotas que estao sendo utilizadas */
        public void RotasEfetivasUsadas()
        {
            GrafoNaoDirigido AGM = this.ArvoreGeradoraMinima();

            Console.WriteLine("Rotas Efetivamente Usadas");
            Console.WriteLine();
            foreach (var rotas in AGM.arestas)
            {
                Console.WriteLine("{0} -> {1}", rotas.Aeroporto1.Aeroporto, rotas.Aeroporto2.Aeroporto);
            }
        }
Beispiel #4
0
        /*que Deus abençõe a Main */
        static void Main(string[] args)
        {
            /*instanciando voo e rotas */
            Voos  = new GrafoDirigido();
            Rotas = new GrafoNaoDirigido();
            /*lendo arquivos e armazenando num vetor */
            String[] arquivos = File.ReadAllLines("arquivo.txt");
            /*variaveis para poder recuperar as informações no vetor*/
            string          nome1, nome2;
            int             direcao;
            int             distancia;
            TimeSpan        duracao;
            List <TimeSpan> horarios = new List <TimeSpan>();
            int             id       = 0;

            /*leitura do arquivo e a criação dos objetos */
            for (int i = 0; i < arquivos.Length; i++)
            {
                if (i != 0)
                {
                    string[] aux = arquivos[i].Split(';');
                    nome1     = aux[0];
                    nome2     = aux[1];
                    direcao   = int.Parse(aux[2]);
                    distancia = int.Parse(aux[3]);
                    duracao   = new TimeSpan(int.Parse(aux[4].Split(':')[0]), int.Parse(aux[4].Split(':')[1]), 0);
                    horarios  = new List <TimeSpan>();
                    for (int j = 5; j < aux.Length; j++)
                    {
                        horarios.Add(new TimeSpan(int.Parse(aux[j].Split(':')[0]), int.Parse(aux[j].Split(':')[1]), 0));
                    }

                    Vertices aeroportoA = Voos.buscaAeroporto(nome1);
                    if (aeroportoA == null)
                    {
                        aeroportoA = new Vertices(++id, nome1);
                    }
                    Rotas.inserirVertice(aeroportoA);
                    Voos.inserirVertice(aeroportoA);

                    Vertices aeroportoB = Voos.buscaAeroporto(nome2);
                    if (aeroportoB == null)
                    {
                        aeroportoB = new Vertices(++id, nome2);
                    }
                    Rotas.inserirVertice(aeroportoB);
                    Voos.inserirVertice(aeroportoB);

                    Arestas rota = new Arestas(aeroportoA, aeroportoB, distancia);
                    Rotas.inserirRota(rota);

                    ArestasDirigidas arestaDirigida = new ArestasDirigidas(aeroportoA, aeroportoB, direcao, distancia, duracao, horarios);
                    Voos.inserirAresta(arestaDirigida);
                }
            }

            /*menuzinho com frufru, porque sou dessas
             * não tem muito o que dizer... é um switch que pega o dado do user e faz o que é necessário
             * não preocupei muito com tratamento de exeções porque se nao esse negocio nao ia acabar nunca
             * mas tive o cuidado de colocar um ToUpperCase() para usar sempre maiusculo nas entradas do usuário
             */
            string   acao = string.Empty;
            string   origem, destino = string.Empty, horariostring = string.Empty;
            TimeSpan horario = new TimeSpan();

            bool flg = false;

            do
            {
                Console.Clear();
                Console.WriteLine("Selecione uma ação: ");
                Console.WriteLine("1 - Calcular a menor rota em escalas");
                Console.WriteLine("2 - Calcular a menor rota em distância percorrida");
                Console.WriteLine("3 - Calcular a menor rota em tempo de voo");
                Console.WriteLine("4 - Calcular a menor rota em tempo total");
                Console.WriteLine("5 - Verificar se todos os aeroportos estão conectados (ou quais grupos estão)");
                Console.WriteLine("6 - Como não chegar atrasado na reunião");
                Console.WriteLine("7 - Quais rota serão utilizadas na minha empresa de tráfico aéreo");
                Console.WriteLine("0 - Sair");

                acao = Console.ReadLine();

                switch (acao)
                {
                case "1":
                    Console.Clear();
                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de origem?");
                        origem = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == origem) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    flg = false;
                    Console.Clear();
                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de destino?");
                        destino = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == destino) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    Console.Clear();
                    Voos.menorCaminhoEmConexoes(origem, destino);
                    Console.WriteLine("Aperte qualquer botão para continuar");
                    Console.ReadKey();
                    break;

                case "2":
                    Console.Clear();
                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de origem?");
                        origem = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == origem) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    flg = false;
                    Console.Clear();

                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de destino?");
                        destino = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == destino) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    Console.Clear();
                    Voos.MenorCaminhoDistancia(origem, destino);
                    Console.WriteLine("Aperte qualquer botão para continuar");
                    Console.ReadKey();
                    break;

                case "3":
                    Console.Clear();
                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de origem?");
                        origem = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == origem) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    flg = false;
                    Console.Clear();

                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de destino?");
                        destino = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == destino) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    Console.Clear();
                    Voos.MenorCaminhoTempo(origem, destino);
                    Console.WriteLine("Aperte qualquer botão para continuar");
                    Console.ReadKey();
                    break;

                case "4":
                    Console.Clear();
                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de origem?");
                        origem = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == origem) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    flg = false;
                    Console.Clear();

                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de destino?");
                        destino = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == destino) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    Console.Clear();
                    Voos.MenorCaminhoTempoTotal(origem, destino);
                    Console.WriteLine("Aperte qualquer botão para continuar");
                    Console.ReadKey();
                    break;

                case "5":
                    Console.Clear();
                    Voos.verificaSeGrafoFortementeConexo();
                    Console.WriteLine("Aperte qualquer botão para continuar");
                    Console.ReadKey();
                    break;

                case "6":
                    Console.Clear();
                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de origem?");
                        origem = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == origem) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    flg = false;
                    Console.Clear();

                    do
                    {
                        Console.WriteLine("Qual é o aeroporto de destino?");
                        destino = Console.ReadLine().ToUpper();
                        if (Voos.Vertices.FirstOrDefault(x => x.Aeroporto == destino) == null)
                        {
                            Console.WriteLine("Aeroporto não encontrado.");
                            continue;
                        }
                        flg = true;
                    } while (!flg);

                    Console.Clear();
                    flg = false;

                    do
                    {
                        Console.WriteLine("Digite o horário que da reunião no formato hh:mm:");
                        horariostring = Console.ReadLine();

                        if (int.Parse(horariostring.Split(':')[0]) > 23 || int.Parse(horariostring.Split(':')[1]) > 59)
                        {
                            Console.WriteLine("Horario inválido");
                            continue;
                        }
                        horario = new TimeSpan(int.Parse(horariostring.Split(':')[0]), int.Parse(horariostring.Split(':')[1]), 0);
                        flg     = true;
                    } while (!flg);

                    Console.Clear();
                    Voos.ComoNaoChegarAtrasadoNaReuniao(origem, destino, horario);
                    Console.WriteLine("Aperte qualquer botão para continuar");
                    Console.ReadKey();
                    break;

                case "7":
                    Console.Clear();
                    Rotas.RotasEfetivasUsadas();
                    Console.WriteLine("Aperte qualquer botão para continuar");
                    Console.ReadKey();
                    break;

                case "0":
                    break;

                default:
                    Console.Clear();
                    Console.WriteLine("Ação inválida. Favor repetir.");
                    Thread.Sleep(1500);
                    break;
                }
            } while (acao != "0");
        }