//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); }
//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); } } }
//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); }
public void SetV2(Vertice valor) { this.v2 = valor; }
public void SetV1(Vertice valor) { this.v1 = valor; }
//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); }
//Verifica se há adjacência entre os vértices passados como parâmetro public bool Adjacentes(Vertice v1, Vertice v2) { return(true); }
//TODO: Verificar o que quer dizer com Par/Impar public bool Par(Vertice vertice) { return(true); }
//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; } }