Skip to content

Instantly share code, notes, and snippets.

@marcoscastro
Created February 18, 2015 17:08
Show Gist options
  • Save marcoscastro/76634e1d38d0d7eef2e1 to your computer and use it in GitHub Desktop.
Save marcoscastro/76634e1d38d0d7eef2e1 to your computer and use it in GitHub Desktop.
C++ - Grafos - Lista de adjacência
// 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;
}
@leomarn
Copy link

leomarn commented Jun 12, 2018

esse método diz quais os vértices de um grafo e a quantidade de arestas?

@18carica
Copy link

18carica commented Jun 4, 2024

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