Implemente uma classe Grafo para armazenar uma estrutura de grafo baseada em lista de adjacências, em C++, respeitando o seguinte:
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