题目:求最小划分子集
划分子集问题
问题描述:已知集合A={a1,a2,……an},及集合上的关系R={ (ai,aj) | ai,aj∈A, i≠j},其中(ai,aj)表示ai与aj间存在冲突关系。要求将A划分成互不相交的子集A1,A2,……Ak,(k≤n),使任何子集中的元素均无冲突关系,同时要求分子集个数尽可能少。
测试数据:
元素集合A={1,2,3,4,5,6,7,8,9}
冲突关系集合R={ (2,8), (9,4), (2,9), (2,1), (2,5), (6,2), (5,9),
(5,6), (5,4), (7,5), (7,6), (3,7), (6,3) }
参考框架:
#define N 10
bool testColor(R,m)
{//利用栈测试能否对关系图R,采用m种颜色着色,使得冲突的元素(相邻的区域)着上不同颜色
}
int findMin(bool R[N][N])
{
for (int m=1;m
if (testColor(R,m)==true)
return m;
return N;
}
int main()
{//构造测试数据,调用findMin,并打印结果
}
要求一:利用参考框架求出最小划分子集数量
要求二:增加测试用例
要求三:求出最小划分各个子集的元素,并打印输出
要求四:三月二十九实验课交本子