Wednesday, October 31, 2012

Depth First Search (DFS)

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
#define siz 1000005
vector <int> vec[siz];
int color[siz];
int node,edge;

void reset(){
    for(int i=0;i<=node;i++){
        color[i]=0;
        vec[i].clear();
    }
}

void dfs(int n){
    color[n]=1;
    for(int i=0;i<vec[n].size();i++){
        int v=vec[n][i];
        if(!color[v]){
            dfs(v);
        }
    }
    color[n]=2;
}
int main()
{

    int u,v;
    //freopen("input.txt","r",stdin);
    while(scanf("%d%d",&node,&edge)==2){
        reset();

        for(int i=0;i<edge;i++){
            scanf("%d%d",&u,&v);
            vec[u].push_back(v);
            vec[v].push_back(u);
        }

        for(int i=1;i<=node;i++)
            if(!color[i])
                dfs(i);

    }
    return 0;
}

No comments:

Post a Comment