Grafo::Grafo(int V){this->V = V;// atribui o número de vértices
adj =newlist<int>[V];// cria as listas}voidGrafo::adicionarAresta(int v1,int v2){// adiciona vértice v2 à lista de vértices adjacentes de v1
adj[v1].push_back(v2);}voidGrafo::dfs(int v){stack<int> pilha;bool visitados[V];// vetor de visitados// marca todos como não visitadosfor(int i =0; i < V; i++)
visitados[i]=false;while(true){if(!visitados[v]){
cout <<"Visitando vertice "<< v <<" ...\n";
visitados[v]=true;// marca como visitado
pilha.push(v);// insere "v" na pilha}bool achou =false;list<int>::iterator it;// busca por um vizinho não visitadofor(it = adj[v].begin(); it != adj[v].end(); it++){if(!visitados[*it]){
achou =true;break;}}if(achou)
v =*it;// atualiza o "v"else{// se todos os vizinhos estão visitados ou não existem vizinhos// remove da pilha
pilha.pop();// se a pilha ficar vazia, então terminou a buscaif(pilha.empty())break;// se chegou aqui, é porque pode pegar elemento do topo
v = pilha.top();}}}
Pergunta
LuanBsilvaa
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.