Beispiel #1
0
        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;
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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++);
            }
        }