我正在处理一个 m_coloring 问题,其中我必须使用回溯确定无向图的色数 m。到目前为止,我的(java)解决方案是递增 m,尝试 m_Coloring 方法,如果找不到解决方案,则重复。但是,对于较大的文件,如果 m 超过 6,则计算需要很长时间。有人告诉我,我们使用的算法没有合并修剪,所以我试图弄清楚如何把它放进去,但经过一周的搜索却没有运气。
vColor = new int[nodes+1];
vColor[1] = 1;
while(unsolved)
{
m++;
mColoring(1);
}
static void mColoring(int i)
{
int color;
if (promising(i))
{
if (i==nodes)
{
unsolved = false;
}
else
{
for(color = 1; color<=m; color++)
{
if(unsolved)
{
vColor[i+1] = color;
mColoring(i+1);
}
}
}
}
}
static public boolean promising (int i)
{
int j=1;
boolean promise = true;
while(j<i && promise)
{
if(adjMatrix[i][j] && vColor[i] == vColor[j])
{
promise = false;
}
j++;
}
return promise;
}