Esempio n. 1
0
        public Grafo getAGMKruskal()
        {
            List <Vertice> vertices    = new List <Vertice>();
            Grafo          arvore      = new Grafo(this.vertices.Count() + 1);
            List <Aresta>  usadas      = new List <Aresta>();
            List <Aresta>  disponiveis = arestas;

            while (vertices.Count() < this.vertices.Count())
            {
                disponiveis = disponiveis.Where(a => !usadas.Contains(a)).ToList();
                var menor = menorPeso(disponiveis);
                usadas.Add(menor);
                arvore.adicionarVertice(menor.Vert1);
                arvore.adicionarVertice(menor.Vert2);
                if (!(vertices.Contains(menor.Vert1) && vertices.Contains(menor.Vert2)))
                {
                    arvore.adicionarAresta(menor.Vert1, menor.Vert2, menor.Peso);
                }
                if (!vertices.Contains(menor.Vert1))
                {
                    vertices.Add(menor.Vert1);
                }
                if (!vertices.Contains(menor.Vert2))
                {
                    vertices.Add(menor.Vert2);
                }
            }
            return(arvore);
        }
Esempio n. 2
0
        public Grafo getAGMPrim()
        {
            List <Vertice> vertices = new List <Vertice>()
            {
                this.vertices.First()
            };
            List <Aresta> usadas = new List <Aresta>();
            Grafo         arvore = new Grafo(this.vertices.Count() + 1);

            arvore.adicionarVertice(this.vertices.First());
            while (vertices.Count() < this.vertices.Count())
            {
                List <Aresta> disponiveis = new List <Aresta>();
                foreach (Vertice v in vertices)
                {
                    disponiveis = disponiveis.Concat(arestasPorVertice(v)).ToList();
                }
                disponiveis = disponiveis.Where(a => !usadas.Contains(a)).ToList();
                var menor = menorPeso(disponiveis);
                usadas.Add(menor);
                if (vertices.Contains(menor.Vert1) && vertices.Contains(menor.Vert2))
                {
                }
                else
                {
                    if (vertices.Contains(menor.Vert2))
                    {
                        vertices.Add(menor.Vert1);
                        arvore.adicionarVertice(menor.Vert1);
                        arvore.adicionarAresta(menor.Vert1, menor.Vert2, menor.Peso);
                    }
                    else if (vertices.Contains(menor.Vert1))
                    {
                        vertices.Add(menor.Vert2);
                        arvore.adicionarVertice(menor.Vert2);
                        arvore.adicionarAresta(menor.Vert1, menor.Vert2, menor.Peso);
                    }
                }
            }
            return(arvore);
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            string[] leitor = File.ReadAllLines(@"../../../Teste.txt");
            Console.WriteLine("\t Alunos: " +
                              "\n Ana Luiza Gonçalves Lourenço Barros" +
                              "\n Douglas Barbosa da Silva" +
                              "\n Jonathan William de Paiva" +
                              "\n Lucas Gomes Oliveira" +
                              "\n Victor Henrique de Souza Oliveira \n");
            Grafo nv          = new Grafo(Convert.ToInt32(leitor[0]) + 1);
            bool  naodirigido = true;

            foreach (string linha in leitor)
            {
                string[] corte = linha.Split(';');
                if (corte.Length > 3)
                {
                    Vertice Vert1;
                    Vertice Vert2;
                    int     peso;
                    int     direcao;

                    if (corte.Length == 1)
                    {
                    }
                    else
                    {
                        naodirigido = false;
                        Vert1       = new Vertice(Convert.ToInt32(corte[0]));
                        Vert2       = new Vertice(Convert.ToInt32(corte[1]));
                        peso        = Convert.ToInt32(corte[2]);
                        direcao     = Convert.ToInt32(corte[3]);
                        nv.adicionarVertice(Vert1);
                        nv.adicionarVertice(Vert2);
                        nv.adicionarArestaDirigida(Vert1, Vert2, peso, direcao);
                    }
                }
                else
                {
                    Vertice Vert1;
                    Vertice Vert2;
                    int     peso;


                    if (corte.Length == 1)
                    {
                    }
                    else
                    {
                        Vert1 = new Vertice(Convert.ToInt32(corte[0]));
                        Vert2 = new Vertice(Convert.ToInt32(corte[1]));
                        peso  = Convert.ToInt32(corte[2]);
                        nv.adicionarVertice(Vert1);
                        nv.adicionarVertice(Vert2);
                        nv.adicionarAresta(Vert1, Vert2, peso);
                        nv.isAdjacente(Vert1, Vert2);
                        nv.getGrau(Vert1);
                        nv.getGrau(Vert2);
                        nv.adjacentes(Vert1);
                    }
                }
            }
            if (naodirigido)
            {
                Console.WriteLine(nv.printarMatriz());
                foreach (var item in nv.vertices)
                {
                    Console.WriteLine("O grau do vertice {0} = {1}", item.Vert, nv.getGrau(item));
                    nv.isPendente(item);
                }
                if (nv.IsIsolado())
                {
                    Console.WriteLine("E isolado");
                }
                else
                {
                    Console.WriteLine("Não e isolado");
                }

                if (nv.isRegular())
                {
                    Console.WriteLine("E regular");
                }
                else
                {
                    Console.WriteLine("Não e regular");
                }
                if (nv.isNulo())
                {
                    Console.WriteLine("E nulo");
                }
                else
                {
                    Console.WriteLine("Não e nulo");
                }
                if (nv.isCompleto())
                {
                    Console.WriteLine("E um grafo completo");
                }
                else
                {
                    Console.WriteLine("Não e um grafo completo");
                }
                if (nv.isConexo())
                {
                    Console.WriteLine("E um grafo Conexo");
                }
                else
                {
                    Console.WriteLine("Não e um grafo Conexo");
                }
                if (nv.isEuleriano())
                {
                    Console.WriteLine("E euleriano");
                }
                else
                {
                    Console.WriteLine("Não e euleriano");
                }
                if (nv.isUnicursal())
                {
                    Console.WriteLine("E Unicursal");
                }
                else
                {
                    Console.WriteLine("Não e Unicursal");
                }
                Grafo arvore  = nv.getAGMPrim();
                Grafo arvore2 = nv.getAGMKruskal();
                Console.WriteLine("\n Matriz da prim");
                Console.WriteLine(arvore.printarMatriz());
                Console.WriteLine("Matriz da Kruskal");
                Console.WriteLine(arvore2.printarMatriz());
                nv.getCutVertices();
            }
            else
            {
                Console.WriteLine(nv.printarMatriz());
                foreach (var item in nv.vertices)
                {
                    Console.WriteLine("O grau de entrada do vertice {0} = {1}", item.Vert, nv.getGrauEntrada(item));
                    Console.WriteLine("O grau de saida do vertice {0} = {1}", item.Vert, nv.getGrauSaida(item));
                }
                if (nv.hasCiclo())
                {
                    Console.WriteLine("Este grafo possui ciclo");
                }
                else
                {
                    Console.WriteLine("Este grafo não possui ciclo");
                }
            }

            Console.ReadKey();
        }