示例#1
0
        //Remove aresta entre os vértices passados como parâmetro
        public bool RemoverAresta(Vertice v1, Vertice v2)
        {
            //Verifica se os dois vértices estão presentes no grafo
            if (verticesDoGrafo.Contains(v1) && verticesDoGrafo.Contains(v2))
            {
                //Verifica se há adjacência entre os vértices
                if ((v1.ListaAdjacencia.Contains(v2) && (v2.ListaAdjacencia.Contains(v1))))
                {
                    v1.ListaAdjacencia.Remove(v2);
                    v1.Grau--;

                    v2.ListaAdjacencia.Remove(v1);
                    v2.Grau--;

                    return(true);
                }
            }

            return(false);
        }
示例#2
0
        //Construtora: Inicializa a matriz de adjacência pelo tamanho nxn, onde n é a quantidade de vértices passada como parâmetro
        public Grafo(int qtdeVertices)
        {
            this.qtVertices = qtdeVertices;

            //colocando os vértices no Grafo
            verticesDoGrafo = new List <Vertice>();
            for (int indice = 0; indice < qtVertices; indice++)
            {
                verticesDoGrafo.Add(new Vertice(indice + 1));
            }

            MA = new Aresta[qtVertices, qtVertices];

            //Inicializando a MA com os vértices posicionados de forma correta
            for (int indiceY = 0; indiceY < MA.GetLength(1); indiceY++)
            {
                for (int indiceX = 0; indiceX < MA.GetLength(0); indiceX++)
                {
                    Vertice v1 = new Vertice(1);
                    Vertice v2 = new Vertice(1);

                    foreach (Vertice vertice in verticesDoGrafo)
                    {
                        if (vertice.Nome == indiceX + 1)
                        {
                            v1 = vertice;
                        }
                    }

                    foreach (Vertice vertice in verticesDoGrafo)
                    {
                        if (vertice.Nome == indiceY + 1)
                        {
                            v2 = vertice;
                        }
                    }

                    MA[indiceX, indiceY] = new Aresta(v1, v2);
                }
            }
        }
示例#3
0
        //Insere aresta entre os vértices passados como parâmetro
        public bool InserirAresta(Vertice v1, Vertice v2)
        {
            /*CUIDADOS AO INSERIR UMA ARESTA:
             * 1 - Verificar se os dois vértices do parâmetro estão presentes no grafo
             * 2 - Verificar se não há nenhuma aresta já inserida entre esses vértices
             */

            //Verifica se os dois vértices estão presentes no grafo
            if (verticesDoGrafo.Contains(v1) && verticesDoGrafo.Contains(v2))
            {
                //Verifica se não há adjacência entre os vértices
                if (!(v1.ListaAdjacencia.Contains(v2)) && !(v2.ListaAdjacencia.Contains(v1)))
                {
                    if (v1 != v2)
                    {
                        v1.ListaAdjacencia.Add(v2);
                        v1.Grau++;

                        v2.ListaAdjacencia.Add(v1);
                        v2.Grau++;

                        MA[(v1.Nome - 1), (v2.Nome - 1)].SetLigado(true);
                        MA[(v2.Nome - 1), (v1.Nome - 1)].SetLigado(true);

                        return(true);
                    }
                    else
                    {
                        Console.Write("Não é permitido inserir loops em um grafo não direcionado.");
                    }
                }
                else
                {
                    Console.Write("Já existe uma aresta nesses dois vértices.");
                }
            }

            return(false);
        }
示例#4
0
 public void SetV2(Vertice valor)
 {
     this.v2 = valor;
 }
示例#5
0
 public void SetV1(Vertice valor)
 {
     this.v1 = valor;
 }
示例#6
0
 //CONSTRUCTOR
 public Aresta(Vertice valor1, Vertice valor2)
 {
     this.v1  = valor1;
     this.v2  = valor2;
     isLigado = false;
 }
 //Retorna a quantidade de graus presente no vértice passado como parâmetro
 public int Grau(Vertice vertice)
 {
     return(vertice.Grau);
 }
示例#8
0
 //Verifica se há adjacência entre os vértices passados como parâmetro
 public bool Adjacentes(Vertice v1, Vertice v2)
 {
     return(true);
 }
示例#9
0
 //TODO: Verificar o que quer dizer com Par/Impar
 public bool Par(Vertice vertice)
 {
     return(true);
 }
示例#10
0
 //Verifica se o vértice é isolado
 public bool Isolado(Vertice vertice)
 {
     return(true);
 }
        public static void ExecutaOpcao(ref Grafo grafo, int escolha)
        {
            Console.Clear();

            switch (escolha)
            {
            case 1:     //Ordem
                Console.Write("A ordem desse grafo é: " + grafo.Ordem());
                break;

            case 2:     //Insere Aresta
                Console.WriteLine("Escolha quais vértices deseja inserir uma aresta: ");
                grafo.NomesVertices();
                Console.Write("Vértice 1: ");
                Vertice v1 = grafo.GetVertice(int.Parse(Console.ReadLine()));
                Console.Write("Vértice 2: ");
                Vertice v2 = grafo.GetVertice(int.Parse(Console.ReadLine()));
                grafo.InserirAresta(v1, v2);

                break;

            case 3:     //Remove Aresta
                Console.WriteLine("Escolha quais vértices deseja remover uma aresta: ");
                grafo.NomesVertices();
                Console.Write("Vértice 1: ");
                v1 = grafo.GetVertice(int.Parse(Console.ReadLine()));
                Console.Write("Vértice 2: ");
                v2 = grafo.GetVertice(int.Parse(Console.ReadLine()));
                grafo.RemoverAresta(v1, v2);

                break;

            case 4:     //Grau do vértice
                Console.WriteLine("Escolha qual vértice deseja saber o grau: ");
                grafo.NomesVertices();
                Console.Write("Vértice: ");
                Vertice vertice = grafo.GetVertice(int.Parse(Console.ReadLine()));

                Console.Write("O grau do vértice v" + vertice.Nome + " é: " + grafo.Grau(vertice));

                break;

            case 5:     //Grafo Completo
                if (grafo.Completo())
                {
                    Console.Write("O grafo está completo.");
                }
                else
                {
                    Console.Write("O grafo está incompleto.");
                }

                break;

            case 6:     //Grafo Regular
                if (grafo.Regular())
                {
                    Console.Write("O grafo é regular.");
                }
                else
                {
                    Console.Write("O grafo é irregular.");
                }
                break;

            case 7:     //Matriz de Adjacência
                grafo.ShowMA();
                break;

            case 8:     //Lista de Adjacência
                grafo.ShowLA();
                break;

            case 9:     //Sequência de Graus
                Console.WriteLine("Sequência de graus do Grafo:");
                grafo.SequenciaGraus();
                break;

            case 10:     //Vértices adjacentes de um vértice
                Console.WriteLine("Escolha qual vértice deseja ver os vértices adjcentes: ");
                grafo.NomesVertices();
                vertice = grafo.GetVertice(int.Parse(Console.ReadLine()));
                grafo.VerticesAdjacentes(vertice);
                break;

            case 11:     //Vertice isolado
                Console.WriteLine("Escolha qual vértice deseja verificar se é isolado: ");
                grafo.NomesVertices();
                vertice = grafo.GetVertice(int.Parse(Console.ReadLine()));
                if (grafo.Isolado(vertice))
                {
                    Console.WriteLine("Esse vertice é Isolado.");
                }
                else
                {
                    Console.WriteLine("Esse vertice não é Isolado.");
                }
                break;

            case 12:     //Par
                Console.WriteLine("Escolha qual vértice deseja verificar se é par: ");
                grafo.NomesVertices();
                vertice = grafo.GetVertice(int.Parse(Console.ReadLine()));
                if (grafo.Par(vertice))
                {
                    Console.WriteLine("O vertice informado é Par.");
                }
                else
                {
                    Console.WriteLine("O vertice informado não é Par.");
                }
                break;

            case 13:     //Impar
                Console.WriteLine("Escolha qual vértice deseja verificar se é impar: ");
                grafo.NomesVertices();
                Console.WriteLine("Informe o vertice para verificação: ");
                vertice = grafo.GetVertice(int.Parse(Console.ReadLine()));
                if (grafo.Impar(vertice))
                {
                    Console.WriteLine("O vertice informado é Impar.");
                }
                else
                {
                    Console.WriteLine("O vertice informado não é Impar.");
                }
                break;

            case 14:     //Adjacência entre 2 vértices
                Console.WriteLine("Escolha quais vértices deseja verificar se há adjacência entre eles: ");
                grafo.NomesVertices();
                Console.WriteLine("Vertice 1:");
                v1 = grafo.GetVertice(int.Parse(Console.ReadLine()));
                Console.WriteLine("Vertice 2:");
                v2 = grafo.GetVertice(int.Parse(Console.ReadLine()));
                if (grafo.Adjacentes(v1, v2))
                {
                    Console.WriteLine("Os vertices informados são adjacentes!");
                }
                else
                {
                    Console.WriteLine("Os vertices informados não são adjacentes.");
                }
                break;

            default:
                Console.Write("Nenhuma opção válida escolhida.");
                break;
            }
        }