二分圖判定(塗色問題)





代碼如下:

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章