poj1129
来源:互联网 发布:sublime配置c语言 编辑:程序博客网 时间:2024/05/02 16:24
#include <iostream>#include <cstdio>#include <string.h>using namespace std;int n,ans;int mapp[30][30],color[30];bool Judge(int m,int r)//判断m是否与其相连接的点同色{ for(int j=0;j<n;j++) { if(mapp[m][j]&&color[j]==r) return false; } return true;}void DFS(int i,int usedcolor){ int j; if(usedcolor>ans) return;//小小的剪枝 if(i>n) { ans=usedcolor; return; } else{ for(j=1;j<=usedcolor;j++)//如果usedcolor就可以满足条件 { if(Judge(i,j)) { color[i]=j; DFS(i+1,usedcolor); color[i]=0;//回溯 } } if(j>usedcolor)//如果usedcolor种颜色不满足条件,就再增加一种 { usedcolor++; color[i]=usedcolor; DFS(i+1,usedcolor); color[i]=0; } }}int main(){ int i,e; char s[30]; while(scanf("%d",&n)&&n) { memset(mapp,0,sizeof(mapp)); memset(color,0,sizeof(color)); for(i=0;i<n;i++) { scanf("%s",s); for(e=2;e<strlen(s);e++) mapp[i][s[e]-'A']=1; } ans=100; DFS(0,0); if(ans==1) printf("1 channel needed.\n"); else printf("%d channels needed.\n",ans); } return 0;}