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


      




  • 相关阅读:
    POJ 1860
    Notepad++ 经常使用快捷键 (MEMO)
    SpringMVC现实
    krpano漫游加方向性3D声音(这篇文章已被移到krpano中国网站 krpano360.com)
    DFS PKU 1562
    Java中间(三十五)-----Java详细设置(一个):请指定初始容量设置
    HDU 5052 Yaoge’s maximum profit 光秃秃的树链拆分 2014 ACM/ICPC Asia Regional Shanghai Online
    智课雅思词汇---二十五、-ate
    新东方雅思词汇---8.3、apt
    新东方雅思词汇---7.4、cap
  • 原文地址:https://www.cnblogs.com/ZhangJinkun/p/4531362.html
Copyright © 2020-2023  润新知