NYOJ 1015 二部图(二分图判断)

我用的bfs简单判断二分图

如果它相邻的颜色节点颜色相同的话就返回false

否则遍历完返回true

用的邻接表存储

 /*
 qq:1239198605
 ctgu_yyf
        */

#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;

vector<int> Edge[205]; 

bool bfs(int u)
{
	int que[205];
	int front=0,rear=0;
	int color[205];
	
	memset(color,-1,sizeof(color));
	
	color[u]=1;
	que[rear++]=u;
	
	while(front!=rear)
	{
		int v=que[front++];
		for(int i=0;i<Edge[v].size();i++)
		{
			int x=Edge[v][i];
			if(color[x]==-1)
			{
				color[x]=!color[v];
				que[rear++]=x;
			}
			else if(color[x]==color[v]) return false;
		}
		
	}
	return true;
		
	
}

int main()
{
   ios::sync_with_stdio(false);
   int n,m;
   
   while(cin>>n)
   {
   	cin>>m;
   	
   	for(int i=0;i<n;i++)
	Edge[i].clear();    
   	
   	int u,v;
   	for(int i=0;i<m;i++)
   	{
   		cin>>u>>v;
   		Edge[u].push_back(v);
   		Edge[v].push_back(u);   		
	}
	if(bfs(0))
	cout<<"BICOLORABLE."<<endl;
	else
	cout<<"NOT BICOLORABLE."<<endl;

   }
   


return 0;
}

猜你喜欢

转载自blog.csdn.net/k_koris/article/details/81984993