BFS与DFS两种实现:(邻接矩阵存图)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
int col[205],n,m;
bool map[205][205],flag;
bool bfs(int s)
{
queue<int>q;
q.push(s);
col[s]=1;
int i;
while(!q.empty())
{
int p=q.front();
q.pop();
for(i=1;i<=n;++i)
{
if(map[p][i]&&col[i]==-1)
{
q.push(i);
col[i]=!col[p];
}
else if(map[p][i]&&col[p]==col[i]) return 0;
}
}
return 1;
}
int main()
{
int i;
while(scanf("%d",&n)!=EOF&&n>0)
{
scanf("%d",&m);
memset(map,0,sizeof(map));
memset(col,-1,sizeof(col));
for(i=1;i<=m;++i)
{
int x,y;
scanf("%d %d",&x,&y);
map[x][y]=map[y][x]=1;
}
flag=1;
for(i=0;i<n;++i)
if(col[i]==-1&&!bfs(i))
{
flag=0;
break;
}
if(flag) puts("BICOLORABLE.");
else puts("NOT BICOLORABLE.");
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int M[205][205],color[205],n;
bool bi(int u){
for(int i=0;i<n;++i){
if(M[u][i]){
if(!color[i])
{
color[i]=3-color[u];
if(!bi(i)) return 0;
}
else if(color[i]==color[u]) return 0;
}
}
return 1;
}
int main()
{
int i,m,x,y;
while(~scanf("%d",&n)&&n){
scanf("%d",&m);
memset(M,0,sizeof(M));
for(i=0;i<m;++i) {
scanf("%d%d",&x,&y);
M[x][y]=M[y][x]=1;
}
memset(color,0,sizeof(color));
bool flag=1;
for(i=0;i<n&&flag;++i)
if(!color[i]){
color[i]=1;
if(!bi(i)) flag=0;
}
if(flag) puts("BICOLORABLE.");
else puts("NOT BICOLORABLE.");
}
return 0;
}