我用的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;
}