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 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/3830747.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值