寻找汉密尔顿回路(java版)

package hg;

public class Hanmierdun {
    //结点的个数
    public int n =5;
    public int b[] = new int[5];
    //是否已经经过该结点
    public boolean used[] = new boolean[5];
    //是否已经全部走过
    public boolean cc = false;
       public static void main(String args[]){
        //汉密尔顿连接图
        int a[][]={{0,1,1,1,0},
          {1,0,1,0,1},
          {1,1,0,1,0},
          {1,0,1,0,1},
          {0,1,0,1,0}
        };
       
        Hanmierdun aa = new Hanmierdun();
        aa.dfs(a, 0, 0);
       }
      
       private void dfs(int a[][],int count,int m){
        //如果所有的结点都已经走过且最后一个结点和开始的结点是相通的
        if(count>=this.n&&a[b[count-1]][0]==1){
         //输出经过的结点次序
         for(int i=0;i<b.length;i++){
          System.out.print(b[i]+1);
         }
         System.out.println();
         cc=true;
         return;
        }
     
        else{
         for(int j=0;j<a[m].length;j++){
          //如果联通且未经过
          if(a[m][j]==1&&used[m]==false){
           //设置为已经通过
           used[m] = true;
           b[count] = m;
           count = count+1;
           dfs(a,count,j);
           //设置为未通过
          
used[m] = false;
           count = count-1;
           if(cc){
            cc=false;
            return;
           }
          
          }
         }
        }
       }
 
 
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值