标签:
题意:输入n个点,m组数据,然后有两种不同的颜色,n个点可能相互相邻。要求相邻的两个点不能用一种颜色,问是否可以做到,可以做到输出
代码:
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<math.h> using namespace std; int n,m; int map[205][205]; int v[205]; void BFS() { int p[100010]; for(int i=0;i<n;i++) { p[i] = -1; } memset(v,0,sizeof(v)); queue<int>q; int flag = 0; int t,f; t = 0; p[t] = 0; q.push(t); v[t] = 1; while(!q.empty()) { t = q.front(); q.pop(); for(int i=0;i<n;i++) { if(map[t][i] == 1) { if(p[i] == -1) { p[i] = (int)fabs(p[t] - 1); q.push(i); } else if(p[t] == p[i]) { flag = 1; break; } } } if(flag == 1) { break; } } if(flag == 1) { printf("NOT BICOLORABLE.\n"); } else { printf("BICOLORABLE.\n"); } } int main() { while(scanf("%d",&n)!=EOF) { if(n == 0) { break; } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { map[i][j] = 0; } } scanf("%d",&m); int a,b; for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); map[a][b] = 1; map[b][a] = 1; } BFS(); } return 0; }
标签:
原文地址:http://blog.csdn.net/yeguxin/article/details/43021569