标签:des style blog http color java os io
Time Limit: 1000 MS Memory Limit: 10000 KB
64-bit integer IO format: %I64d , %I64u Java class name: Main
2 A: B: 4 A:BC B:ACD C:ABD D:BC 4 A:BCD B:ACD C:ABD D:ABC 0
1 channel needed. 3 channels needed. 4 channels needed.
#include <iostream> #include <string.h> #include <stdio.h> using namespace std; /*int n; ///n个广播站 bool map[35][35]; ///个广播站之间的联系关系 int ans; ///需要多少广播站 int color[35]; ///染色 bool IsFind;*/ int n; bool IsFind; int ans; int color[35]; bool map[35][35]; ///两个版本定义有什么区别呢?????????????????? bool OK(int x,int c) ///判断相邻节点颜色是否相同 { for(int i=0;i<n;i++) { if(map[x][i]&&c==color[i]) ///id节点与各个节点比较 x与id节点有连边&&颜色重复了 { return false; } } return true; } void DFS(int id,int total) ///当前染色节点编号 总共用的颜色数量 { if(IsFind) return ; if(id>=n) { IsFind=true; return ; } for(int i=1;i<=total;i++) { if(OK(id,i)) { color[id]=i; ///符合条件就上色 之前的颜色 DFS(id+1,total); ///继续加点 color[id]=0; ///回溯 } } if(!IsFind) ///之前的颜色都不符合要求 { ans++; ///加点 DFS(id,total+1); ///加颜色 } } int main() { char str[35]; while(scanf("%d",&n)!=EOF) { if(n==0) break; memset(map,false,sizeof(map)); memset(color,0,sizeof(color)); for(int i=1;i<=n;i++) { cin>>str; int len=strlen(str); for(int j=2;j<=len;j++) { map[str[0]-‘A‘][str[j]-‘A‘]=true;; } } IsFind=false; ans=1; DFS(0,1); if(ans==1) printf("1 channel needed.\n"); else printf("%d channels needed.\n",ans); } return 0; }
标签:des style blog http color java os io
原文地址:http://www.cnblogs.com/zhangying/p/3919203.html