回溯法---哈密顿回路(5)<?xml version="1.0" encoding="UTF-8"?>
在给定图中任取一点,要求经过图中所有点,最后回到起始点,要求同一个点不允许重复经过
在(2)算法框架基础上:
importjava.util.Vector;
publicclassHamiltonextendsCombineProblem{
intstart;
int[][]graph;
publicHamilton(int[][]graph,intstart,intn){
this.graph=graph;
this.flag=false;
this.n=n;
this.x=newInteger[n];
this.start=start-1;
}
@Override
publicVector<Comparable>makeIterm(intk){
Vector vec=newVector();
if(k==0){
vec.add(start);
}else
for(inti=0;i<n;i++){
if(graph[(Integer)x[k-1]][i]==1){
vec.add(i);
}
}
returnvec;
}
@Override
publicbooleancomplete(intk){
if(k>=n){
returngraph[(Integer)x[k-1]][(Integer)x[0]]==1;
}
returnfalse;
}
@Override
publicvoidprintsolution(intk){
for(inti=0;i<n;i++){
System.out.print((Integer)x[i]+1+" ");
}
System.out.println();
}
@Override
publicbooleanisPartial(intk){
for(inti=0;i<k;i++){
if(x[i].compareTo(x[k])==0){
returnfalse;
}
}
returntrue;
}
}
运行结果:
1 2 5 4 3
1 3 2 5 4
1 3 4 5 2
1 4 5 2 3
转载于:https://www.cnblogs.com/ZhangJinkun/p/4531359.html