Implemente uma classe Grafo para armazenar uma estrutura de grafo baseada em lista de adjacências, em C++, respeitando o seguinte:
Saída BFS a partir do vértice 0: 0 1 5 2 6 4 3Saída DFS a partir do vértice 0:
0 1 2 6 3 4 5
0: 1(28), 5(10) 1: 0(28), 2(16), 6(14) 2: 1(16) 3: 6(18) 4: 5(25), 6(24) 5: 0(10), 4(25) 6: 1(14), 3(18), 4(24)
Grafo G(7); G.insereAresta(0,1,28); G.insereAresta(0,5,10); G.insereAresta(1,2,16); G.insereAresta(1,6,14); G.insereAresta(3,6,18); G.insereAresta(4,5,25); G.insereAresta(4,6,24);
#ifndef T5_GRAFO_H
#define T5_GRAFO_H
#include <vector>
class Grafo
{
public:
//Construtor. N = numero de vertices.
Grafo( int N );
//Insere uma aresta no grafo, do nó @de para o nó @para, com peso @peso.
//Caso @direcionado esteja marcado como false, insere a aresta tambem no sentido para->de
void insereAresta( int de, int para, int peso = 1, bool direcionado = false );
//Imprime os vertices e seus vizinhos
void mostra();
//Imprime os nos do grafo na ordem de uma busca em largura
void bfs( int s );
//Imprime os nos do grafo na ordem de uma busca em profundidade
void dfs(int s);
private:
struct Aresta
{
int v; //Vertice destino
int p; //Peso da aresta
};
enum Cor
{
BRANCO,
CINZA,
PRETO
};
//Lista de adjacencias
std::vector< std::vector< Aresta > > G;
/* Funcoes e membros privados que julgar necessarios */
};
#endif // T5_GRAFO_H