예제 #1
0
        /* -----------
         *
         *  Insstancia um grafo com matriz de adjacência
         *
         * ------------- */
        public static GrafoMatriz instanciaGrafoDoArquivo(String filename, GrafoMatriz G)
        {
            StreamReader input = new StreamReader(filename);

            int numeroDeVertices = int.Parse(input.ReadLine());

            G = new GrafoMatriz(numeroDeVertices);

            instanciaGrafo(input, G);

            input.Close();

            return(G);
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="G"></param>
        /// <returns>Retorna um grafo coplementar</returns>
        public Grafo getComplementar(GrafoMatriz Gm)
        {
            numVertices = Gm.get_numVertices();
            GrafoLista Gl = new GrafoLista(numVertices);

            for (int i = 0; i < numVertices; ++i)
            {
                for (int j = 0; j < numVertices; j++)
                {
                    if (!Gm.existeAresta(i, j, 1))
                    {
                        Gl.insereAresta(i, j, 1);
                    }
                }
            }


            return(Gl);
        }
예제 #3
0
        public GrafoMatriz grafoTransposto()
        {
            GrafoMatriz grafoT = new GrafoMatriz(this.numVertices);

            for (int v = 0; v < this.numVertices; v++)
            {
                if (!this.listaAdjVazia(v))
                {
                    Aresta adj = this.primeiroListaAdj(v);
                    while (adj != null)
                    {
                        grafoT.insereAresta(adj.v2, adj.v1, adj.peso);
                        adj = this.proxAdj(v);
                    }
                }
            }

            return(grafoT);
        }
예제 #4
0
        public bool isBipartido(GrafoMatriz Gm)
        {
            this.Gm     = Gm;
            numVertices = Gm.get_numVertices();
            cor         = new int[numVertices];
            int v;
            int c = 0; //representa a "cor"

            for (v = 0; v < numVertices; ++v)
            {
                cor[v] = -1;
            }
            for (v = 0; v < numVertices; ++v)
            {
                if (cor[v] == -1)
                {
                    if (dfsCor(v, c) == 0)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
예제 #5
0
        static void Main(string[] args)
        {
            GrafoLista       G           = null;
            GrafoMatriz      Gm          = null;
            int              numVertices = 0;
            clListaPraticaUm listaexc;
            String           filename = "";



            do
            {
                if (tipoGrafo == 0)
                {
                    Console.Clear();
                    Console.WriteLine("Escolha o tipo de Grafo :");

                    Console.WriteLine("╔════════════════════════════╗");
                    Console.WriteLine("║[1 ] = Grafo não dirigido   ║");
                    Console.WriteLine("║[2 ] = Grafo dirigido       ║");
                    Console.WriteLine("║[0 ] = Sair                 ║");
                    Console.WriteLine("╚════════════════════════════╝");
                    Console.Write("Digite uma opção: ");
                    opcao = Int32.Parse(Console.ReadLine());
                    switch (opcao)
                    {
                    case 1:
                        tipoGrafo = 1;
                        filename  = @"C:\Users\Cid\Documents\Visual Studio 2015\Projects\Grafos\inputND.txt";
                        G         = instanciaGrafoDoArquivo(filename, G);
                        Gm        = instanciaGrafoDoArquivo(filename, Gm);
                        break;

                    case 2:
                        tipoGrafo = 2;
                        filename  = @"C:\Users\Cid\Documents\Visual Studio 2015\Projects\Grafos\inputD.txt";
                        G         = instanciaGrafoDoArquivo(filename, G);
                        Gm        = instanciaGrafoDoArquivo(filename, Gm);
                        break;

                    case 0:
                        tipoGrafo = 0;
                        break;
                    }
                    Console.Clear();
                }
                else if (tipoGrafo == 1)
                {
                    listaexc = new clListaPraticaUm(G);
                    int    v1, v2, grauVertive;
                    String Vertice;
                    Console.WriteLine("Considere um grafo não dirigido:");

                    Console.WriteLine("╔═════════════════════════════╗");
                    Console.WriteLine("║[0  ] = Imprimir Grafo       ║");
                    Console.WriteLine("║[1  ] = Vertices Adjacentes  ║");
                    Console.WriteLine("║[2  ] = Grau do Vertice      ║");
                    Console.WriteLine("║[3  ] = Grafo Regular        ║");
                    Console.WriteLine("║[4  ] = Vertice Isolado      ║");
                    Console.WriteLine("║[5  ] = Vertice Pendente     ║");
                    Console.WriteLine("║[6  ] = Grafo Nulo           ║");
                    Console.WriteLine("║[7  ] = Grafo Completo       ║");
                    Console.WriteLine("║[8  ] = Grafo Conexo         ║");
                    Console.WriteLine("║[9  ] = Grafo Bipartido      ║");
                    Console.WriteLine("║[10 ] = Grafo Complementar   ║");
                    Console.WriteLine("║[11 ] = Grafo Eureliano      ║");
                    Console.WriteLine("║[12 ] = grafo Unicursal      ║");
                    Console.WriteLine("║[13 ] = grafo Hamiltoniano   ║");
                    Console.WriteLine("║[100] = Menu Principal       ║");
                    Console.WriteLine("╚═════════════════════════════╝");
                    Console.Write("Digite uma opção: ");
                    opcao = Int32.Parse(Console.ReadLine());
                    switch (opcao)
                    {
                    case 0:
                        G.imprime();
                        break;

                    case 1:
                        numVertices = Gm.get_numVertices();
                        do
                        {
                            Console.Write("\nEntre com V1: ");
                            v1 = Int32.Parse(Console.ReadLine());
                        } while (v1 >= numVertices);
                        do
                        {
                            Console.Write("\nEntre com V2: ");
                            v2 = Int32.Parse(Console.ReadLine());
                        } while (v2 >= numVertices);
                        Vertice = (Gm.existeAresta(v1, v2, 1)) ? "O Vertice V" + v1 + " e adjacente a v" + v2 : "O Vertice V" + v1 + " nao e adjacente a v" + v2;
                        Console.WriteLine(Vertice);
                        break;

                    case 2:
                        numVertices = Gm.get_numVertices();
                        do
                        {
                            Console.Write("\nEntre com V1: ");
                            v1 = Int32.Parse(Console.ReadLine());
                        } while (v1 >= numVertices);
                        grauVertive = listaexc.getGrau(v1);
                        Console.WriteLine("O grau do Vertice [" + v1 + "] = " + grauVertive);
                        break;

                    case 3:
                        Vertice = (listaexc.isRegular(G)) ? "\nEste grafo e regular" : "Este grafo nao e regular";
                        Console.WriteLine(Vertice);
                        break;

                    case 4:
                        numVertices = Gm.get_numVertices();
                        do
                        {
                            Console.Write("\nEntre com V1: ");
                            v1 = Int32.Parse(Console.ReadLine());
                        } while (v1 >= numVertices);
                        Vertice = (listaexc.isIsolado(v1)) ? "O Vertice V" + v1 + " e isolado" : "O Vertice V" + v1 + " nao e isolado";
                        Console.WriteLine(Vertice);
                        break;

                    case 5:
                        numVertices = Gm.get_numVertices();
                        do
                        {
                            Console.Write("\nEntre com V1: ");
                            v1 = Int32.Parse(Console.ReadLine());
                        } while (v1 >= numVertices);
                        Vertice = (listaexc.isPedente(v1)) ? "O Vertice V" + v1 + " e Pendente" : "O Vertice V" + v1 + " nao e Pendente";
                        Console.WriteLine(Vertice);

                        break;

                    case 6:
                        Vertice = (listaexc.isNulo(G)) ? "\nEste grafo e Nulo" : "Este grafo nao e nulo";
                        Console.WriteLine(Vertice);
                        break;

                    case 7:
                        Vertice = (listaexc.isCompleto(G)) ? "\nEste grafo e completo" : "Este grafo nao e completo";
                        Console.WriteLine(Vertice);
                        break;

                    case 8:
                        Vertice = (listaexc.isConexo(Gm)) ? "\nEste grafo e conexo" : "Este grafo nao e conexo";
                        Console.WriteLine(Vertice);
                        break;

                    case 9:
                        Vertice = (listaexc.isBipartido(Gm)) ? "\nEste grafo e BiPartido" : "Este grafo nao e BiPartido";
                        Console.WriteLine(Vertice);
                        break;

                    case 10:
                        Grafo Gl = listaexc.getComplementar(Gm);
                        Gl.imprime();
                        break;

                    case 11:
                        Vertice = (listaexc.isEuleriano(G)) ? "\nEste grafo e Eureliano" : "Este grafo nao e Eureliano";
                        Console.WriteLine(Vertice);
                        break;

                    case 12:
                        Vertice = (listaexc.isUnicursal(G)) ? "\nEste grafo e Unicursal" : "Este grafo nao e Unicursal";
                        Console.WriteLine(Vertice);
                        break;

                    case 13:
                        Vertice = (listaexc.isHamiltoniano(G)) ? "\nEste grafo e Hamiltoniano" : "Este grafo nao e Hamiltoniano";
                        Console.WriteLine(Vertice);
                        break;

                    case 100:
                        tipoGrafo = 0;
                        break;

                    default:

                        break;
                    }
                    Console.ReadLine();
                    Console.Clear();
                }
                else if (tipoGrafo == 2)
                {
                    listaexc = new clListaPraticaUm(G);
                    String Vertice;
                    int    v1, v2, grauVertive;
                    Console.WriteLine("Considere um grafo dirigido:");

                    Console.WriteLine("╔═════════════════════════════╗");
                    Console.WriteLine("║[0  ] = Imprimir Grafo       ║");
                    Console.WriteLine("║[1  ] = Grafo Ciclico        ║");
                    Console.WriteLine("║[2  ] = Grau de entrada      ║");
                    Console.WriteLine("║[3  ] = ordenacao Topologica ║");
                    Console.WriteLine("║[4  ] = Grafo Transposto     ║");
                    Console.WriteLine("║[5  ] = Vertice FConexo      ║");
                    Console.WriteLine("║[100] = Menu Principal       ║");
                    Console.WriteLine("╚═════════════════════════════╝");
                    Console.Write("Digite uma opção: ");
                    opcao = Int32.Parse(Console.ReadLine());
                    switch (opcao)
                    {
                    case 0:
                        G.imprime();
                        break;

                    case 1:
                        Vertice = (listaexc.hasCiclo(G)) ? "\nEste grafo tem Ciclo" : "Este grafo nao tem Ciclo";
                        Console.WriteLine(Vertice);
                        break;

                    case 2:
                        numVertices = Gm.get_numVertices();
                        do
                        {
                            Console.Write("\nEntre com V1: ");
                            v1 = Int32.Parse(Console.ReadLine());
                        } while (v1 >= numVertices);
                        int grau = listaexc.getGrauEntrada(Gm, v1);
                        Console.WriteLine(grau);
                        break;

                    case 3:
                        Vertice = (listaexc.hasCiclo(Gm)) ? "\nEste grafo e Ciclo" : "Este grafo nao e Ciclo";
                        Console.WriteLine(Vertice);
                        break;

                    case 4:
                        GrafoLista Gl;
                        Gl = listaexc.getTransposto(G);
                        Gl.imprime();
                        break;

                    case 5:
                        Vertice = (listaexc.isFConexo(G)) ? "\nEste grafo e FConexo" : "Este grafo nao e FConexo";
                        Console.WriteLine(Vertice);
                        break;

                    case 100:
                        tipoGrafo = 0;
                        break;


                    default:

                        break;
                    }
                    Console.ReadLine();
                    Console.Clear();
                }
            }while (opcao != 0);
        }
예제 #6
0
        public bool existeAresta(int v1, int v2, int peso)
        {
            GrafoMatriz mat = new GrafoMatriz(5);

            return(mat.existeAresta(v1, v2, peso));
        }