poj 1129 四色原理DFS
来源:互联网 发布:linux httpd配置文件 编辑:程序博客网 时间:2024/06/07 01:24
如题:http://poj.org/problem?id=1129
用中继器(repeater)给每个接受者(receiver)发送信号,为了防止信号干扰,两个相邻的广播站之间的中继器要不相同。问至少需要多少个中继器。
等同于个个图着色,问最少需要几种颜色使得相邻顶点颜色不同。
由四色原理:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同。所以最多只需要4种颜色。(这里没用四色原理,用的直接搜素。)
用深搜来做DFS(int v,int colnum)//假设当前以v为顶点 图可以用从colnum数量的颜色涂满。然后只需要每深一层v++,最后如果v>n(n是图总顶点数),表示全部顶点涂色完毕,返回。
#include<iostream>
#include<cctype>
using namespace std;
#define N 27
int g[N][N],num,n,isfind=0;
int col[N];
int ok(int v)
{
for(int i=1;i<=n;i++)
{
if(i!=v)
{
if(g[v][i]&&col[v]==col[i])
return 0;
}
}
return 1;
}
void DFS(int v,int colnum)
{
if(v>n)
{
isfind=1;
return;
}
for(int i=1;i<=colnum;i++)
{
col[v]=i;
if(ok(v))
{
DFS(v+1,colnum);
}
}
if(!isfind)
{
num++;
DFS(v,colnum+1);
}
}
int main()
{
int i;
char ch;
while(scanf("%d", &n) && n)
{
memset(g, 0, sizeof(g));
ch = getchar(); //这个ch用来接收scanf多出的那个回车(缓冲区中)
for(i=1; i<=n; i++)
{
ch = getchar();
ch = getchar();
while(isalpha(ch = getchar()))
{
g[i][ch-'A'+1] = 1;
g[ch-'A'+1][i] = 1;
}
}
isfind=0;
num=1;
DFS(1,1);
if (num == 1)
printf ("1 channel needed.\n");
else printf ("%d channels needed.\n", num);
}
return 0;
}
- poj 1129 四色原理DFS
- poj 1129(ID-DFS四色定理)
- poj 1129(DFS+四色定理)
- POJ 1129 Channel Allocation dfs(四色定理)
- poj 1129(dfs+图的四色定理)
- POJ 1129 Channel Allocation (四色定理+DFS)
- POJ-1129-Channel Allocation-dfs搜索+四色定理
- POJ 1129 Channel Allocation DFS+四色定理
- POJ 1129 Channel Allocation(DFS + 四色定理)
- [Poj 1129] Channel Allocation DFS+四色定理剪支
- POJ Channel Allocation 1129(dfs+四色定理)
- POJ 1129Channel Allocation(四色+dfs搜索剪枝)
- POJ 1129 Channel Allocation (dfs+四色定理)
- POJ 1129 四色原理+搜索
- POJ 3009 基础搜索 DFS 四
- poj 1129 dfs
- POJ 1129 (dfs)
- poj 1129 四色定理
- N!(1042)hdu(大数阶乘)
- [转]java中byte转换int时为何与0xff进行与运算
- iocp例子
- Hanlde消息处理机制的复习——网络图片下载
- Servlet编程基础概述-MVC控制层
- poj 1129 四色原理DFS
- 数据结构实验之链表五:单链表的拆分
- 如何用AHK脚本,把当前窗口最前端显示?有时候查看的时候方便
- 视图
- 数据库三范式
- 之一:X86段式内存管理与保护模式
- 为什么写博客
- BestCoder Round #16 1001(hdu 5086)
- 用 Java 生成 Java - CodeModel 介绍