Created
February 18, 2015 17:08
-
-
Save marcoscastro/76634e1d38d0d7eef2e1 to your computer and use it in GitHub Desktop.
C++ - Grafos - Lista de adjacência
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Grafos - Lista de adjacência | |
#include <iostream> | |
#include <list> | |
#include <algorithm> // função find | |
using namespace std; | |
class Grafo | |
{ | |
int V; // número de vértices | |
list<int> *adj; // ponteiro para um array contendo as listas de adjacências | |
public: | |
Grafo(int V); // construtor | |
void adicionarAresta(int v1, int v2); // adiciona uma aresta no grafo | |
// obtém o grau de saída de um dado vértice | |
// grau de saída é o número de arcos que saem de "v" | |
int obterGrauDeSaida(int v); | |
bool existeVizinho(int v1, int v2); // verifica se v2 é vizinho de v1 | |
}; | |
Grafo::Grafo(int V) | |
{ | |
this->V = V; // atribui o número de vértices | |
adj = new list<int>[V]; // cria as listas | |
} | |
void Grafo::adicionarAresta(int v1, int v2) | |
{ | |
// adiciona vértice v2 à lista de vértices adjacentes de v1 | |
adj[v1].push_back(v2); | |
} | |
int Grafo::obterGrauDeSaida(int v) | |
{ | |
// basta retornar o tamanho da lista que é a quantidade de vizinhos | |
return adj[v].size(); | |
} | |
bool Grafo::existeVizinho(int v1, int v2) | |
{ | |
if(find(adj[v1].begin(), adj[v1].end(), v2) != adj[v1].end()) | |
return true; | |
return false; | |
} | |
int main() | |
{ | |
// criando um grafo de 4 vértices | |
Grafo grafo(4); | |
// adicionando as arestas | |
grafo.adicionarAresta(0, 1); | |
grafo.adicionarAresta(0, 3); | |
grafo.adicionarAresta(1, 2); | |
grafo.adicionarAresta(3, 1); | |
grafo.adicionarAresta(3, 2); | |
// mostrando os graus de saída | |
cout << "Grau de saida do vertice 1: " << grafo.obterGrauDeSaida(1); | |
cout << "\nGrau de saida do vertice 3: " << grafo.obterGrauDeSaida(3); | |
// verifica se existe vizinhos | |
if(grafo.existeVizinho(0, 1)) | |
cout << "\n\n1 eh vizinho de 0\n"; | |
else | |
cout << "\n\n1 NAO eh vizinho de 0\n"; | |
if(grafo.existeVizinho(0, 2)) | |
cout << "2 eh vizinho de 0\n"; | |
else | |
cout << "2 NAO eh vizinho de 0\n"; | |
return 0; | |
} |
Esse método não deixa o usuário inserir os valores
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
esse método diz quais os vértices de um grafo e a quantidade de arestas?