#P1129. Channel Allocation
Channel Allocation
题目描述(Description)
当一个广播电台需要在非常广阔的区域内播放信号时,通常会使用中继器(repeater)来转发信号,以确保每个接收器都能接收到足够强的信号。然而,为了避免相邻中继器之间的信号干扰,每个中继器必须使用不同的频道(channel)。
由于无线频谱资源有限,所以在设计中继器网络时,应尽量减少所需的频道数量。你的任务是:编写一个程序,读取某个中继器网络的描述,并判断该网络最少需要多少个频道才能保证所有相邻中继器的频道不同。
输入格式(Input)
输入由若干个中继器网络组成,每个网络的输入格式如下:
第一行包含一个整数,表示中继器数量,记为 ,其中 ;
中继器以大写字母依次命名:若 ,则中继器为 A、B、C、...、J;
若输入为 ,表示输入结束,不需要处理这一组数据;
接下来的 行,每行描述一个中继器及其相邻的中继器,格式如下:
A:BCDH 表示中继器 A 与 B、C、D、H 相邻;若没有邻居,格式为:
A: 注意事项:
邻接关系是对称的:如果 A 与 B 相邻,则 B 也一定与 A 相邻;
中继器所在的网络为平面图,即不会存在交叉的连接线;
中继器的定义按字母顺序排列(输入顺序即为 A 到 Z);
输出格式(Output)
对于每个网络(除了最后一个为 0 的网络),输出一行:
表示最少所需频道数;
若所需频道数为 ,使用单数形式 channel;
否则使用复数形式 channels。
输出格式如下:
1 channel needed. 3 channels needed.
2
A:
B:
4
A:BC
B:ACD
C:ABD
D:BC
4
A:BCD
B:ACD
C:ABD
D:ABC
0
1 channel needed.
3 channels needed.
4 channels needed.