POJ 1129 Channel Allocation DFS+四色定理
2016-02-27 17:02
405 查看
点击打开链接
题目翻译:
当一个广播电台在一个非常大的地区,广播站会用中继器来转播信号以使得每一个接收器都能接收到一个强烈的信号。然而,每个中继器必须慎重选择使用,使相邻的中继器不互相干扰。
如果相邻的中继器使用不同的频道,那么就不会相互干扰。
由于无线电频道是一有限的,一个给定的网络所需的中继频道数目应减至最低。编写一个程序,读取一个中继网络,然后求出需要的最低的不同频道数。
建模:
一个有N个节点的无向图,要求对每个节点进行染色,使得相邻两个节点颜色都不同,问最少需要多少种颜色?
那么题目就变成了一个经典的图的染色问题。
四色定理:
四色定理又称四色猜想、四色问题,是世界三大数学猜想之一。四色定理是一个著名的数学定理,
通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同。
题目翻译:
当一个广播电台在一个非常大的地区,广播站会用中继器来转播信号以使得每一个接收器都能接收到一个强烈的信号。然而,每个中继器必须慎重选择使用,使相邻的中继器不互相干扰。
如果相邻的中继器使用不同的频道,那么就不会相互干扰。
由于无线电频道是一有限的,一个给定的网络所需的中继频道数目应减至最低。编写一个程序,读取一个中继网络,然后求出需要的最低的不同频道数。
建模:
一个有N个节点的无向图,要求对每个节点进行染色,使得相邻两个节点颜色都不同,问最少需要多少种颜色?
那么题目就变成了一个经典的图的染色问题。
四色定理:
四色定理又称四色猜想、四色问题,是世界三大数学猜想之一。四色定理是一个著名的数学定理,
通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同。
#include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> #include<queue> #include<set> #define PI acos(-1) #define eps 0.00000001 using namespace std; int a[100][100]; int vis[100]; int used[100]; int Max,n; int judge(int x,int color) ///判断相邻的颜色是否一样<span id="transmark"></span> { for(int i=0;i<n;i++) if(a[x][i]&&vis[i]==color) return 0; return 1; } void DFS(int ind) { if(n==ind) { ///vis[]表示 一种方案 对应的所有的染色情况 ///*max_element(vis,vis+n) 表示这种方案 所用的颜料数 Max=min(Max,*max_element(vis,vis+n)); ///所有的组成方案中最小的 return ; } for(int i=ind;i<n;i++) { for(int j=1;j<=4;j++) { if(judge(i,j)) { vis[i]=j; DFS(i+1); } } } } int main() { char s[100]; while(~scanf("%d",&n),n) { Max=10000000; memset(a,0,sizeof(a)); for(int i=1; i<=n; i++) { scanf("%s",s); char ch=s[0]-'A'; for(int j=2; s[j]!='\0'; j++) { a[s[j]-'A'][ch]=a[ch][s[j]-'A']=1; } } DFS(0); if(Max==1) printf("%d channel needed.\n",Max); else printf("%d channels needed.\n",Max); } return 0; }
相关文章推荐
- 微信调用扫一扫的步骤
- Android项目使用兼容包(support v7)
- 005_Http之request获取客户端信息03-获取请求参数
- 【转】Linux下的多线程编程
- leetcode-98
- Solr(二)
- DataGridView 在下拉框添加下来事件
- iOS 异步图片加载优化与常用开源库分析
- codeforces 633B B. A Trivial Problem(数论)
- nginx ngx_http_limit_req_module 简单防下CC攻击
- TCP、UDP、HTTP、SOCKET之间的区别
- ZOJ1027 Travelling Fee(DP+SPFA)
- 看完《Don't make me think》的总结
- 谈笑风生组件化
- 工具的使用——windows操作系统的使用(二)
- eclipse j2ee打开出错 java was started but returned code=13
- iOS Block的循环引用问题
- linux命令学习笔记
- 浅谈多进程多线程的选择(转)
- 20160227