Uva--10004 (DFS,染色问题)

2014-07-08 02:48:40

题意:给出图(节点和连通关系),问用两种颜色染点能否使相邻点异色。

思路: 把图存在邻接链表(数组实现中),然后DFS。这里采用一种通用的模板,即给出N种颜色,能否染色。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 using namespace std;
 7 const int N = 2;
 8 int flag,n,m,g[205][205],cnt[205],col[205];
 9 
10 void Dfs(int index){
11     int i,used[N + 1] = {0};
12     for(i = 0; i < cnt[index]; ++i)
13         used[col[g[index][i]]] = 1;
14     for(i = 1; i <= N; ++i)
15         if(!used[i]){
16             col[index] = i;
17             break;
18         }
19     if(i > N){
20         flag = 0;
21         return;
22     }
23     for(i = 0; i < cnt[index]; ++i)
24         if(!col[g[index][i]])
25             Dfs(g[index][i]);
26 }
27 
28 int main(){
29     int a,b;
30     while(scanf("%d",&n) == 1 && n){
31         scanf("%d",&m);
32         memset(g,0,sizeof(g));
33         memset(cnt,0,sizeof(cnt));
34         memset(col,0,sizeof(col));
35         while(m--){
36             scanf("%d %d",&a,&b);
37             g[a][cnt[a]++] = b;
38             g[b][cnt[b]++] = a;
39         }
40         flag = 1;
41         Dfs(0);
42         if(flag) printf("BICOLORABLE.\n");
43         else printf("NOT BICOLORABLE.\n");
44     }
45     return 0;
46 }

 

posted @ 2014-07-08 02:54  Naturain  阅读(303)  评论(0编辑  收藏  举报