您的位置:首页 > 其它

二分图判定(染色法)

2017-05-02 10:20 337 查看
vector<int> g[10000];

int V,E,color[10000];

bool dfs(int v,int c)

{

    color[v]=c;

    for(int i=0; i<g[v].size(); i++)

    {

        if(color[g[v][i]]==c)return false;

        if(color[g[v][i]]==0&&!dfs(g[v][i],-c))

            return false;

    }

    return true;

}

void solve()

{

    for(int i=0; i<V; i++)

    {

        if(color[i]==0)

        {

            if(!dfs(i,1))

            {

                printf("no\n");

                return ;

            }

        }

    }

    printf("yes\n");

}

int main()

{

    int i,u,v;

    //srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样

    //for( i=0;i<10;i++)

    //push(int(rand()%11));

    scanf("%d%d",&V,&E);

    for(i=0; i<E; i++)

    {

        scanf("%d%d",&u,&v);

        g[u].push_back(v);

        g[v].push_back(u);

    }

    solve();

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: