java着色算法_纠正回溯图着色算法的Java递归代码

问题是使用递归为给定的图形着色最少的颜色数量,使得没有相邻的顶点可以具有相同的颜色。函数签名是静态的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值