#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1010
int map[N][N], vis[N];
bool color[N];
int n, m, i, a, b;
int dfs(int x){
for(i = 0;i < n; i++)
if(map[x][i])
{
if(!vis[i])
{
vis[i] = 1;
color[i] = !color[x];
dfs(i);
}
else if(color[x] == color[i])
return 0;
}
return 1;
}//深搜,一个点为起始点,无限往下搜索,相连的点的颜色要不一样,二色图。
int main(){
while(scanf("%d", &n) && n){
scanf("%d", &m);
memset(map, 0, sizeof(map));
memset(vis, 0, sizeof(vis));
for(i = 0;i < m; i++)
{
scanf("%d%d", &a, &b);
map[a][b] = 1;
map[b][a] = 1;
}
vis[0] = 1;
color[0] = 1;
dfs(0);
if(dfs(0))
printf("BICOLORABLE.\n");
else
printf("NOT BICOLORABLE.\n");
}
return 0;
}
UVA10004
最新推荐文章于 2019-05-07 22:21:47 发布