POJ 1129:Channel Allocation 四色定理+暴力搜索
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 13357 | Accepted: 6836 |
Description
with one another. This condition is satisfied if adjacent repeaters use different channels.
Since the radio frequency spectrum is a precious resource, the number of channels required by a given network of repeaters should be minimised. You have to write a program that reads in a description of a repeater network and determines the minimum number of
channels required.
Input
ten repeaters would have the names A,B,C,...,I and J. A network with zero repeaters indicates the end of input.
Following the number of repeaters is a list of adjacency relationships. Each line has the form:
A:BCDH
which indicates that the repeaters B, C, D and H are adjacent to the repeater A. The first line describes those adjacent to repeater A, the second those adjacent to B, and so on for all of the repeaters. If a repeater is not adjacent to any other, its line
has the form
A:
The repeaters are listed in alphabetical order.
Note that the adjacency is a symmetric relationship; if A is adjacent to B, then B is necessarily adjacent to A. Also, since the repeaters lie in a plane, the graph formed by connecting adjacent repeaters does not have any line segments that cross.
Output
only one channel is required.
Sample Input
2
A:
B:
4
A:BC
B:ACD
C:ABD
D:BC
4
A:BCD
B:ACD
C:ABD
D:ABC
0
Sample Output
1 channel needed.
3 channels needed.
4 channels needed.
题意是给了一堆的信号辐射塔,然后给了各个塔之间的关系,A:BCD代表A与B塔,A与C塔,A与D塔相邻,这样的话A就不能与B、C、D塔中的任何一个使用相同的辐射频率。问在给定关系的情况下,最少使用多少种辐射频率。
和小时候接触的世界地图的染色方案一样,相邻国家不能使用同一种颜色。这样最多就4种颜色。
这道题折磨了我颇久,用dfs一直不对,结果看了discuss发现顺序染色是不对的。
看给定数据:
6
A:BEF
B:AC
C:BD
D:CEF
E:ADF
F:ADE
3 channels needed.
即:A(1)B(2)C(3)D(1)E(2)F(3)
贪心做法是不对的,还是暴力搜吧,反正一共就26个点,四种颜色换着法地涂,看最后最少能用多少种颜色。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; int n, maxn;
string test;
int grid[30][30]; void dfs(int step,int color[], int cap)
{
if (step == n )
{
maxn = min(maxn, cap);
return;
}
int i, j;
for (i = 1; i <= 4; i++)//根据四色定理可知,一共四种颜色。所以暴力搜索,把所有符合条件的颜色都染着试一下
{
for (j = 0; j < 26; j++)
{
if (grid[step][j] == 1 && color[j] == i)
break;
}
if (j == 26)//如果这个颜色符合条件
{
color[step] = i;
dfs(step + 1, color, max(cap, i));
color[step] = 0;
}
}
} int main()
{
int i, j, k, len;
int color[30];
while (cin >> n)
{
if (n == 0)
break;
memset(grid, 0, sizeof(grid));
memset(color, 0, sizeof(color));
maxn = 10; for (i = 0; i < n; i++)
{
cin >> test;
len = test.length(); if (len == 2)
continue;
k = test[0] - 'A';
for (j = 2; j < len; j++)
{
grid[k][test[j] - 'A'] = 1;
grid[test[j] - 'A'][k] = 1;
}
}
dfs(0,color,0); if (maxn == 1)
{
cout <<"1 channel needed." << endl;
}
else
{
cout << maxn <<" channels needed. "<< endl;
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 1129:Channel Allocation 四色定理+暴力搜索的更多相关文章
- POJ 1129 Channel Allocation 四色定理dfs
题目: http://poj.org/problem?id=1129 开始没读懂题,看discuss的做法,都是循环枚举的,很麻烦.然后我就决定dfs,调试了半天终于0ms A了. #include ...
- 迭代加深搜索 POJ 1129 Channel Allocation
POJ 1129 Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14191 Acc ...
- PKU 1129 Channel Allocation(染色问题||搜索+剪枝)
题目大意建模: 一个有N个节点的无向图,要求对每个节点进行染色,使得相邻两个节点颜色都不同,问最少需要多少种颜色? 那么题目就变成了一个经典的图的染色问题 例如:N=7 A:BCDEFG B:ACDE ...
- POJ 1129 Channel Allocation(DFS)
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13173 Accepted: 67 ...
- POJ 1129 Channel Allocation DFS 回溯
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 15546 Accepted: 78 ...
- poj 1129 Channel Allocation ( dfs )
题目:http://poj.org/problem?id=1129 题意:求最小m,使平面图能染成m色,相邻两块不同色由四色定理可知顶点最多需要4种颜色即可.我们于是从1开始试到3即可. #inclu ...
- poj 1129 Channel Allocation
http://poj.org/problem?id=1129 import java.util.*; import java.math.*; public class Main { public st ...
- poj 1129 Channel Allocation(图着色,DFS)
题意: N个中继站,相邻的中继站频道不得相同,问最少需要几个频道. 输入输出: Sample Input 2 A: B: 4 A:BC B:ACD C:ABD D:BC 4 A:BCD B:ACD C ...
- poj 1054 The Troublesome Frog (暴力搜索 + 剪枝优化)
题目链接 看到分类里是dp,结果想了半天,也没想出来,搜了一下题解,全是暴力! 不过剪枝很重要,下面我的代码 266ms. 题意: 在一个矩阵方格里面,青蛙在里面跳,但是青蛙每一步都是等长的跳, 从一 ...
随机推荐
- java关键字“static”
Java中static使用方法 1.static静态变量 静态变量:每个类只有一个,所有实例共享: 实例变量:每个实例只有一个: package test2; import java.lang.Str ...
- ASP.NETCore -----导出Excel文件并下载
本事例分为nopi(安装DotNetCore.NPOI)下载和EPPlus(EPPlus.Core.dll)下载,其中npoi下载演示的是根据执行的模板进行数据下载 npoi帮助类NpoiExcelU ...
- Qt编写的项目作品2-控件属性设计器(组态)
一.功能特点 自动加载插件文件中的所有控件生成列表,默认自带的控件超过120个. 拖曳到画布自动生成对应的控件,所见即所得. 右侧中文属性栏,改变对应的属性立即应用到对应选中控件,直观简洁,非常适合小 ...
- S7-200 smart输入输出接口试验
工具 西门子 s7-200smart PLC 西门子s7-200 smart 试验 CPU型号是 SR30 这个 编译环境 符号 选择 了 "输入1"以后, 会自动的编地址为I0. ...
- 关于linux 交叉编译器的安装
找了几个贴 https://www.cnblogs.com/uestc-mm/p/6656325.html 这个最好
- C++编程学习(七) 循环结构
1.continue:循环体中结束本次循环,直接进入下一次循环. 2.break:循环直接结束. 3.在for语句循环体中执行continue语句,程序会转到“表达式3”继续运行. 4.使用多重循环的 ...
- QT事件处理–notify()
转载至:https://www.deeplearn.me/349.html 一.说明 Qt 处理事件的方式之一:”继承 QApplication 并重新实现 notify()函数”.Qt 调用 QAp ...
- HDU 4901 多校4 经典计数DP
RT 最近不想写博客,累积了一周多的题目,今天趁着周日放假,全部补上吧 dp[i][j]表示前i个数,操作后的值为j的总个数 注意取或不取,有种完全背包的意味.因为数字小于1024,所以异或的结果也绝 ...
- 留学Essay写作中常见的两类要求词盘点
写essay的时候,我们会常常因为各式各样的要求词而头疼:discuss,describing,evaluate,explain,等等,他们之间有何区别?如果你在思考这个问题,那么这篇文章就是为你写的 ...
- Scanner类的next()方法和nextLine()方法的区别(简)
1. 空白符:回车.空格.tab等 2. next()方法读取到空白符就结束 3. nextLine()方法读取到回车结束,也就是 "\r"