题目大意:相邻中继器不能设置相同频道,否则会干扰信号,问在这个中继器网络中最少设置多少个频道
输入:(有很多case,输入以0结束)
第i个case中地图包含的中继器个数n(1<=n<=26)
第k个中继器的序号:与它相邻的站点序号(序号用大写字母表示,如果没有相邻站点则输入为A:)
输出:? channel(s) needed(注意如果?为1则channel为单数形式)
分析:dfs搜索,其实本题就是一个点着色问题,相邻点必须着不同颜色
每个点的子结点就是它能选择的颜色,在当前这些种颜色下,如果对这个点dfs结束还无解,就加一种颜色重新对这个结点进行dfs
代码:转载自http://blog.csdn.net/non_cease/article/details/7313613
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- using namespace std;
- #define M 26
- int n, ans, color[M];
- bool map[M][M], isFind;