poj 1129 搜索
2012-11-26 15:17
381 查看
//问题描述,这是一道典型的涂色问题,根据四色定理,最多不会超过4中颜色,所以只需要 //枚举1-3种颜色就行了 //对每一个节点来说,用k=1-cor颜色开始涂色,判断每种颜色是否可以使用,如果可以使用的话, //则图成该种颜色,改图下一个节点 //11052306 c00h00g 1129 Accepted 180K 0MS C++ 1731B 2012-11-26 15:17:06 #include<stdio.h> #include<stdlib.h> #include<string.h> int mat[27][27]; int n; char ch[28]; //表示节点的颜色 int color[27]; //使用cor种颜色涂色 1<=cor<=4 //num表示节点的个数,cor表示有多少种颜色 bool paint(int num,int cor){ //对于每一个节点 for(int i=0;i<num;i++){ //对每一种颜色来说 for(int k=1;k<=cor;k++){ //判断当前颜色是否使用 bool flag=false; for(int j=0;j<num;j++){ if(mat[i][j]==1){ if(color[j]==k){ flag=true; break; } } } if(!flag){ color[i]=k; //图上颜色后应该跳出,进行下一个节点的涂色,错误的原因 break; } if(flag&&k==cor) return false; } } return true; } int main(){ while(scanf("%d",&n)!=EOF){ if(n==0) break; getchar();//读取最后一个回车,这一点也应该注意 memset(mat,0,sizeof(mat)); for(int i=0;i<n;i++){ gets(ch); int len=strlen(ch); if(len>2){ for(int j=2;j<len;j++){ mat[i][ch[j]-'A']=1; } } } //============================处理 bool output=false; for(int i=1;i<=3;i++){ memset(color,0,sizeof(color)); if(paint(n,i)){ output=true; if(i==1) printf("1 channel needed.\n"); else printf("%d channels needed.\n",i); break; } } if(output==false) printf("4 channels needed.\n"); } return 0; }
相关文章推荐
- POJ 1129 Channel Allocation DFS搜索 着色问题
- POJ 1129:Channel Allocation 四色定理+暴力搜索
- POJ 1129 Channel Allocation 涂色问题 DFS 回溯 搜索
- POJ 1129 Channel Allocation DFS搜索 着色问题
- POJ 1129 Channel Allocation (暴力搜索)
- POJ 1129:Channel Allocation 四色定理+暴力搜索
- POJ-1129-Channel Allocation-dfs搜索+四色定理
- 迭代加深搜索 POJ 1129 Channel Allocation
- POJ 1129 四色问题 暴力搜索
- poj1129-Channel Allocation(搜索练习6-染色)
- POJ 3104&&POJ 2976 继续二分搜索。。。
- 博弈搜索练习--POJ-2003 Hire and Fire
- River Hopscotch (poj 3258 二分搜索)
- poj 3984 迷宫问题 —— 典型搜索--DFS递归
- [kuangbin带你飞]专题一 简单搜索G - Shuffle'm Up(POJ 3087)
- POJ 2286 The Rotation Game 迭代搜索深度 + A* == IDA*
- poj 1775 简单搜索
- (DFS)poj 1129
- POJ2449 Remmarguts' Date A*搜索K短路
- poj 3104 Drying(二分搜索之最大化最小值)