回溯法---哈密顿回路(5)

回溯法---哈密顿回路(5)<?xml version="1.0" encoding="UTF-8"?>
在给定图中任取一点,要求经过图中所有点,最后回到起始点,要求同一个点不允许重复经过

在(2)算法框架基础上:

import java . util . Vector ;

public class Hamilton extends CombineProblem {

         int start ;

         int [][] graph ;

         public Hamilton ( int [][] graph , int start , int n ) {
                 this . graph = graph ;

                 this . flag = false ;

                 this . n = n ;

                 this . x = new Integer [ n ];

                 this . start = start - 1 ;

         }

        @Override
         public Vector < Comparable > makeIterm ( int k ) {
                Vector vec = new Vector ();
                 if ( k == 0 ) {
                        vec . add ( start );
                 } else
                         for ( int i = 0 ; i < n ; i ++) {
                                 if ( graph [( Integer ) x [ k - 1 ]][ i ] == 1 ) {
                                        vec . add ( i );
                                 }
                         }
                 return vec ;
         }

        @Override
         public boolean complete ( int k ) {
                 if ( k >= n ) {
                         return graph [( Integer ) x [ k - 1 ]][( Integer ) x [ 0 ]] == 1 ;
                 }
                 return false ;
         }

        @Override
         public void printsolution ( int k ) {
                 for ( int i = 0 ; i < n ; i ++) {
                        System . out . print (( Integer ) x [ i ] + 1 + " " );
                 }
                System . out . println ();
         }

        @Override
         public boolean isPartial ( int k ) {
                 for ( int i = 0 ; i < k ; i ++) {
                         if ( x [ i ]. compareTo ( x [ k ]) == 0 ) {
                                 return false ;
                         }
                 }
                 return true ;
         }
}

运行结果:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值