zoukankan      html  css  js  c++  java
  • 回溯法--算法框架(2)

    回溯法--算法框架(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 );
                  }
              }
         }
    }


      




  • 相关阅读:
    ElasticSearch 基础<转载>
    计算文本相似度方法总结(一)
    Java入门1---关键字、标识符、变量、运算符、流程控制、数组
    IntelliJ IDEA安装
    java代码转python代码
    python2和python3切换
    在markdown中插入github仓库中的图片
    MySQL:管理MySQL、事务(三)
    MySQL:查询、修改(二)
    MySQL:主键、外键、索引(一)
  • 原文地址:https://www.cnblogs.com/ZhangJinkun/p/4531362.html
Copyright © 2011-2022 走看看