二分图判定——染色法

【二分图判定——染色法】怎么判定一个图是否为二分图
从其中一个定点开始,将跟它邻接的点染成与其不同的颜色,最后如果邻接的点有相同颜色,则说明不是二分图,每次用bfs遍历即可。

#include #include #include #include using namespace std; const int maxn=1005; int color[maxn]; //记录节点颜色 int link[maxn][maxn]; //记录连通 int n,m; //点数,边数 int dfs(int x,int c){//对x节点进行c染色 ,并向下搜索是否可行 color[x]=c; for(int i=1; i<=n; i++){ if(link[x][i]){//判断是否相连 if(color[i]==c){//如果已经染色,并且颜色一样,失败,返回0 return 0; } if(!color[i]) {//如果没有染色 if(!dfs(i,-c)) {//向下染色,颜色与原来相反,失败返回0 return 0; } } } } //染色成功 return 1; }void judge() {//判断是否为二分图 for(int i=1; i<=n; i++) { if(!color[i]) {//如果没有染色,就进行染色 if(!dfs(i,1)) { printf("NO\n"); //如果染色失败 输出no return; } } } printf("YES\n"); //正常遍历结束,输出yes }int main() { scanf("%d %d",&n,&m); int x,y; for(int i=0; i

    推荐阅读