码迷,mamicode.com
首页 > 编程语言 > 详细

回溯法--算法框架(2)

时间:2015-05-26 21:02:45      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

回溯法--算法框架(2)
基本框架和组成部分:

public abstract class Problem {
     //判断是否有解向量
     boolean flag ;
     //解向量
      Comparable [] x;
     //解向量的大小
     int n;
     //判断是否为完整解
     public abstract boolean complete( int k);
     //打印解向量
     public abstract void printSolution( int k);
     //判断是否为局部的合适解
     public abstract boolean isPartial( int k);
     //回溯探索
     public abstract void explore( int k);
}


由于某些组合问题的解向量 x的分量取值是不固定的,所以需要用 makeItem来创建
import java. util.Vector ;

public abstract class CombineProblem extends Problem {
     //创建解向量的第 k个分量的取值集合
     public abstract Vector <Comparable> makeItem( int k);
     //如果是完整解,打印完整解,依次將 x[k]赋其可能值,如果合适,便立下一个 k,反之,回溯
     @Override
     public void explore ( int k) {
           //判断是否为完成解
           if ( complete(k )) {
               flag = true ;
               //是完整解,打印
              printSolution (k);
           }
           //退出
           if ( k >= n) {
               return;
           }
           //vector是可变长数组
           Vector <Comparable> items = makeItem (k);
           for ( Comparable comparable : items ) {
               x [k] = comparable;
               //如果是合适的部分解,遍历下一个 k
               if ( isPartial(k )) {
                   explore (k + 1 );
              }
          }
     }
}


  




回溯法--算法框架(2)

标签:

原文地址:http://www.cnblogs.com/ZhangJinkun/p/4531362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!