public static GrafoNaoDirigido GrafoNaoDirigido(String nomeArquivo) { String s; String[] aux; StreamReader arquivoGrafo; try { arquivoGrafo = new StreamReader(nomeArquivo); int qtdVertices = int.Parse(arquivoGrafo.ReadLine()); s = arquivoGrafo.ReadLine(); Vertice[] vertices = new Vertice[qtdVertices]; int verticeX; int verticeY; while (s != null) { aux = s.Split(';'); verticeX = int.Parse(aux[0]) - 1; verticeY = int.Parse(aux[1]) - 1; if (vertices[verticeX] == null) { vertices[verticeX] = new Vertice(verticeX + 1); } if (vertices[verticeY] == null) { vertices[verticeY] = new Vertice(verticeY + 1); } vertices[verticeX].AddVerticeAdjacente(vertices[verticeY], int.Parse(aux[2])); vertices[verticeY].AddVerticeAdjacente(vertices[verticeX], int.Parse(aux[2])); s = arquivoGrafo.ReadLine(); } GrafoNaoDirigido grafo = new GrafoNaoDirigido(VerticesPendentes(vertices)); arquivoGrafo.Close(); return(grafo); } catch (FileNotFoundException ex) { throw ex; } catch (Exception ex) { throw ex; } }
static void Main(string[] args) { GrafoNaoDirigido g1 = LeituraArquivo.GrafoNaoDirigido(@"..\..\..\GrafosTests2\txts\NaoDirigido\Prim.txt"); GrafoDirigido gDirigido = LeituraArquivo.GrafoDirigido(@"..\..\..\GrafosTests2\txts\Dirigido\SemCiclo.txt"); Console.WriteLine("São adjacentes: " + g1.isAdjacente(g1.vertices[0], g1.vertices[1])); Console.WriteLine("Grau: " + g1.getGrau(g1.vertices[0])); Console.WriteLine("É isolado: " + g1.isIsolado(g1.vertices[0])); Console.WriteLine("É pendente: " + g1.isPendente(g1.vertices[0])); Console.WriteLine("É regular: " + g1.isRegular()); Console.WriteLine("É nulo: " + g1.isNulo()); Console.WriteLine("Completo: " + g1.isCompleto()); Console.WriteLine("É conexo: " + g1.isConexo()); Console.WriteLine("Numero de Cut Vértice: " + g1.getCutVertices()); Console.WriteLine("É Euleriano: " + g1.isEuleriano()); Console.WriteLine("É Unicursal: " + g1.isUnicursal()); Console.WriteLine("Grafo Complementar: "); g1.getComplementar().Imprimir(); Console.WriteLine("Arvore Geradora Prim: "); g1.getAGMPrim(g1.vertices[0]).Imprimir(); Console.WriteLine("Arvore Geradora Kruskal"); g1.getAGMKruskal().Imprimir(); Console.ReadKey(); }
public GrafoNaoDirigido getComplementar() { //Gera um grafo completo GrafoNaoDirigido grafoComplementar = this.GerarGrafoCompleto(); //Percorre todos os vertices e retira do grafo completo as arestas que existem no grafo original, //Resultando em seu grafo complementar. for (int i = 0; i < vertices.Length; i++) { foreach (var aresta in vertices[i].adjacentes) { grafoComplementar.vertices[i].RemoveVerticeAdjacente(aresta.vertice.id); } } return(grafoComplementar); }
public static GrafoNaoDirigido execute(Vertice origem, GrafoNaoDirigido grafo) { GrafoNaoDirigido arvore = new GrafoNaoDirigido(grafo.gerarGrafoNulo()); vOrigem = origem; Aresta aresta = selecionarAresta(origem); while (aresta != null) { //adiciona a aresta a arvore arvore.adicionarAresta(vOrigem.id, aresta.vertice.id, aresta.peso); //seleciona a aresta de menor peso aresta = selecionarAresta(aresta.vertice); } return(arvore); }
public bool Equals(GrafoNaoDirigido obj) { if (this.NumeroVertices() == obj.NumeroVertices()) { for (int i = 0; i < this.vertices.Length; i++) { if (obj.vertices[i].adjacentes.Count() != this.vertices[i].adjacentes.Count()) { return(false); } } return(true); } else { return(false); } }
public static GrafoNaoDirigido execute(GrafoNaoDirigido grafo) { grafoOrigem = new GrafoNaoDirigido(grafo.vertices); arvore = new GrafoNaoDirigido(grafo.gerarGrafoNulo()); Aresta aresta = FindArestaMenorPeso(); while (aresta != null) { if (!HasCiclo(verticeOrigem, aresta)) { arvore.adicionarAresta(verticeOrigem.id, aresta.vertice.id, aresta.peso); } RemoveArestaGrafoCompleto(verticeOrigem, aresta); aresta = FindArestaMenorPeso(); } return(arvore); }