问题是使用递归为给定的图形着色最少的颜色数量,使得没有相邻的顶点可以具有相同的颜色。函数签名是静态的String exhaustive(int color,String prefix)其中color是所使用的颜色的数量在该迭代中,前缀是由每个节点的颜色组成的字符串(例如,如果有3个节点,其中节点0用颜色0着色,节点1用颜色1着色,节点2用颜色2着色;然后前缀将是012)。当所有节点着色时,函数返回字符串前缀。第一次调用是使用参数(0,“”)进行的,意思是尝试用0种颜色着色。
这是我写的代码。它工作正常,返回少于34个节点的正确答案,但是对于超过34个,该功能不返回到主。任何改进代码的想法将不胜感激。请让我知道是否需要更多信息。
int n=36;
static int[] lastcolor = new int[n];
static StringBuilder newprefix ;
String addprefix="";
static int node=0,j=0;
Graph.generateFixedSet(n);
verticies2 =Graph.getVerticies();
public static String exhaustive(int color,String prefix)
{
newprefix = new StringBuilder(prefix);
if(prefix.length()==verticies2.size())
return prefix;
else
{
for(;j<=color;j++)
{
lastcolor[node]=j;
addprefix = Integer.toString(j);
canColor =1;
tempnode = (verticies2.get(node)).getEdges();
for( h=0;h
{
if((tempnode.get(h)).getColor() == j)
{
canColor =0;
break;
}
}
if(canColor==1)
{
verticies2.get(node).setColor(j);
node++;
j=0;
newprefix.append(addprefix);
break;
}//end if canColor
}//end for
if(j!= 0)
{
if(node==1)
{
color++;
j=0;
node=1;
newprefix.delete(0,newprefix.length());
newprefix.append("0");
}//end if node <=1
else
{
verticies2.get(node).setColor(-1);
node--;
j=lastcolor[node]+1;
newprefix.setLength(node);
}
}//end if j!=0
prefix = newprefix.toString();
return exhaustive(color,prefix);
}//end else
}//end exhaustive