二分图判定(涂色问题)





代码如下:

#include <bits/stdc++.h>
#include<stdio.h>
#define maxn 1000
using namespace std;
vector<int >a[maxn+5];//图
int n;    //顶点数
int color[maxn+5];   //顶点i的颜色
bool dfs(int n,int c){
    color[n]=c;    //把顶点染色
    for(int i=0;i<a[n].size();i++){
        //如果相邻的顶点同色,返回false
        if(color[a[n][i]]==c)return false;
        //如果相邻的顶点没被染色,则染成-c
        if (color[a[n][i]]==0&&!dfs(a[n][i],-c))return false;
    }
    return true;
}
void solve()
{
    for(int i=0;i<n;i++){
        if(color[i]==0){
            if(!dfs(i,1)){
                printf("No\n");
                return ;
            }
        }
    }
    printf("Yes\n");
}
int main()
{
    int t,s;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&t);
        for(int j=0;j<t;j++){
            scanf("%d",&s);
            a[i].push_back(s);
            a[s].push_back(i);
        }
    }
    solve();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43328040/article/details/88090436