Advertisement

应用回溯法解决k着色问题

阅读量:

回溯法求解k着色问题

回溯法:在解空间树中,该算法通过从根节点开始,采用深度优先搜索的方式,对包含所有可能解的问题进行探索。当某节点符合问题的约束条件时,将继续深入其子树进行搜索;若不符合,则对该节点所对应的子树实施剪枝操作。
回溯法适用于解决组合规模较大的问题。
K-着色问题:对于一个无向连通图G=(V,E),目标是找到最小的整数m,使得能够使用m种颜色对图中的顶点进行染色,并确保任意两个相邻的顶点颜色不一致。
测试示例:
以三着色为例
使用color[n]数组来表示n个顶点的颜色分配情况,并通过arc[n][n]数组描述顶点之间的边连接关系。
代码:

复制代码
    #include<iostream>
    using namespace std;
    int arc[10][10];//存储顶点之间边的情况
    int color[10] ;//存储顶点着色情况
    int n;//图的顶点数
    int Ok(int k) {
    	for(int i=0; i<k; i++)
    		if(arc[k][i]==1&&color[i]==color[k])
    			return 0;
    	return 1;
    }
    void GraphColor(int m) {

全部评论 (0)

还没有任何评论哟~