回溯法:GSM通信系统问题
在GSM通信系统中,为了避免相邻基站之间的干扰要求相邻的基站之间不能采用相同的频率来进行通信。 由于频率资源有限,因此就要求基站所占用的频率资源越少越好。
输入要求:
输入包含某地区的基站之间的相邻情况。输入的第一行为一个整数n,表示有多少个邻接信息。后面的n行每一行包含一个邻接关系,每一行的形式如下:
A:BCDH
其中A 表示某给基站的名称,:后的每一个字母都表示一个基站的名称,表示与A相邻的基站,基站数量在1-26个字母。如果某个基站没有相邻的基站,则形式如下:
B:
表示没有与基站B相邻的基站。
输出要求:
输出只有一行,一个整数,也就是需要的最少的频率数。
样例输入:
4
A:BCD
B:ACD
C:ABD
D:ABC
样例输出:
4
很明显,此题可转化为图的着色优化问题,只是颜色限制数目没有给出。算法同理,使用回溯法,以每个基站的配色作为每层搜索的对象,以判断邻接表中相邻基站的配色情况作为剪枝函数,只有当新的颜色出现之后,num才会自加。
具体实例分析如下:
输入:
4
A:BCD
B:ACD
C:ABD
D:ABC
此时,n=4,邻接表转换为
0111
1011
1101
1110
首先对于基站A给一种频率,频率为1,frequen查找发现频率无冲突,继续为B给频率1,频率冲突,给频率为2,无冲突。3、4同理。于是最小的频率数为4。
##C语言代码如下:
#include "iostream"
#include "string"
using namespace std;
#define N 27
typedef struct {
char key;
int m;
}base_station;
base_station base[N];
string