int visitaDfs(int u, vector <int> & cor) { int t=0; cor[u] = CINZA; //printf("%d ", u); int a=0, v=grafo.ProxAdj(u, a++); while(v>=0){ if(cor[v] == BRANCO){ t = visitaDfs(v, cor); if(t>d[u]) d[u]=t; } else{ if(d[v]+1>d[u]) d[u]=d[v]+1; } v = grafo.ProxAdj(u, a++); } cor[u] = PRETO; return d[u]+1; }
void visitaBfs(int u, vector <int> & cor) { cor[u] = CINZA; d[u] = 0; queue <int> fila; fila.push(u); while(!fila.empty()){ u = fila.front(); fila.pop(); int a=0, v=grafo.ProxAdj(u, a++); while(v>=0) { if(cor[v] == BRANCO){ cor[v] = CINZA; d[v] = d[u]+1; antecessor[v] = u; fila.push(v); } v = grafo.ProxAdj(u, a++); } cor[u] = PRETO; } }
void buscaEmProfundidade(int w) { int dist; unsigned n = grafo.NumVertices(); d.resize(n,0); vector <int> cor(n, BRANCO); int a=0, v=grafo.ProxAdj(w, a++); while(v>=0){ if(cor[v] == BRANCO){ dist = visitaDfs(v, cor); if(dist > d[w]) d[w] = dist; } else{ if(d[v]+1>d[w]) d[w]=d[v]+1; } v = grafo.ProxAdj(w, a++); } }