java哈密尔顿回路算法,用回溯方法求哈密尔顿回路——java求解

// 哈密尔顿回路问题

public class Hamilton {

// 图中顶点个数为n,图的邻接矩阵为c[][],存放回路的顶点序号x[],在这里,n个顶点的标号是:0,1,2,...,n-1

public void hamilton(int n,int x[],int c[][]){

boolean[] s=new boolean[n]; // 记录n个顶点的使用与否

// 初始化解向量x[],使用向量s[]

for(int i=0;i

x[i]=-1;

s[i]=false;

}

s[0]=true;

x[0]=0;  // 从序号为0的顶点开始搜索

int k=1; // 初始深度是1,因为有n个结点,且第一个结点已给出(k=0),故空间搜索树深度为n-1(1至n-1)

while(k>=0){

x[k]=x[k]+1; // 搜索下一个顶点编号

while(x[k]

if((!s[x[k]])&&(c[x[k-1]][x[k]]==1)) // 如果顶点x[k]未被使用,而且与前一结点x[k-1]之间有连线~

break;

else

x[k]=x[k]+1;  // 否则寻找下一个顶点

}

if((x[k]

s[x[k]]=true;

k=k+1;

}else if((x[k]

break;

}else{  // 搜索失败,回溯到前一结点,并将原结点复位

x[k]=-1;

k=k-1;

s[x[k]]=false;

}

}

}

public static void main(String args[]){

Hamilton hl=new Hamilton();

int c[][]={

{1,1,1,0,1,0},

{1,1,1,1,0,0},

{1,1,1,1,1,1},

{0,1,1,1,0,1},

{1,0,1,0,1,1},

{0,0,1,1,1,1}

};

int n=6;  //6个顶点

int x[]=new int[n];

hl.hamilton(n, x, c);

System.out.println("哈密尔顿回路是:");

for(int i=0;i

System.out.println("x["+i+"]="+x[i]);

}

}

发表于 2008-04-22 21:11 zhengguitao 阅读(735) 评论(0)  编辑  收藏

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值