二分图的判定

//无向图的二分图判断
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=1000+5;
 
int n;//图节点数
vector<int> G[maxn];//G[i]表示i节点邻接的点
int color[maxn];//color[i]=0,1,2 表i节点 不涂颜色 涂白色 涂黑色
 
//判断无向图是否可二分
bool bipartite(int u)
{
    for(int i=0;i<G[u].size();i++)
    {
        int v=G[u][i];
        if(color[v]==color[u]) return false;
        if(!color[v])
        {
            color[v]=3-color[u];
            if(!bipartite(v)) return false;
        }
    }
    return true;
}
 

猜你喜欢

转载自blog.csdn.net/qq_40859951/article/details/84898818