zoj 1084channel allocation
2016-03-14 23:22
253 查看
#include<stdio.h> #include<string.h> int n,map[27][27],used[27]; int dfs(int id,int color) { int i,j,flag; for(i=1;i<=color;i++) { used[id]=i; //对结点id着色为i flag = 1;//着色成功的标志 for(j=1;j<id;j++) { if(map[j][id]&&used[j]==used[id])//相邻节点之间有连线并且颜色已经使用过了 { flag = 0; break; } } //颜色有效,当所有结点着色完毕或者给下一个结点着色,返回true, if(flag && (id == n || dfs(id+1,color))) return 1; } return 0; } int main() { char str[30]; int i,j,one; while(scanf("%d",&n)!=EOF&&n) { one = 1; memset(map,0,sizeof(map)); for(i=1;i<=n;i++) { scanf("%s",str); for(j=2;str[j];j++,one = 0) map[i][str[j]-'A'+1] = map[str[j]-'A'+1][i] = 1;//存储无向图 } used[1]=1;//第一个节点着色为第一种颜色 if(one) printf("1 channel needed.\n"); else if(dfs(2,2)) printf("2 channels needed.\n"); else if(dfs(2,3)) printf("3 channels needed.\n"); else printf("4 channels needed.\n"); } return 0; }
相关文章推荐
- 用EditText和DatePicker制作的日期选择器
- 编程学习第七天,定义函数
- java集群介绍
- defer和async的区别
- Kefa and Park
- #345 Div2 B. Beautiful Paintings
- 73条日常Linux shell命令汇总
- CentOS下 将tomcat 添加到服务
- 不安全函数(转)
- Android——初学
- Retrofit2.0源码分析
- 反射获取存储器列表
- 无知记事本(算法版)
- 字符串循环右移n位的函数
- Android开发常用服务
- Web性能优化实践
- BCB/Delphi中常用的VCL函数说明(文件函数)
- Swift开发第一篇——异常处理及断言
- HTML DOM display 属性
- 一定要让你彻底明白什么是USB子系统