正在阅读:经验分享:闲谈C++算法封装之穷举法经验分享:闲谈C++算法封装之穷举法

2004-03-26 10:05 出处:CSDN 作者:Kusk 责任编辑:linjixiong

        overFlag = true;  // 这里将没有定义Jumper或IsMatch的穷举视为遍历完成

        return false;     // 不过,如果你认为两者绝不能等同,也可以抛出异常

    }

    while (!(overFlag = !Jumper(curState)) && !IsMatch(curState))

    ;  // 获取下一状态,直到找到可行状态或者遍历完成

    if (overFlag)   // 根据遍历完成情况决定返回值

        return false;

    else

        return true;

  }

    呼……小功告成,总算可以小松一口气。不过如果到此就关闭计算机,就像直播球赛进行到高潮时突然停电一样,太令人不爽。——弄了这么久,总该给个example试一试,来点成就感吧?

    没问题。苹果问题太简单,于是我们选择的是一个传说中的“和是50”超级难题,什么是“和是50”超级难题?请听好了:所谓“和是50”超级难题,就是在0到99的整数组成的一个加法算式中,找出和是50的算式,考虑加数顺序,像0+50啊,1+49啊,……,49+1啊,50+0啊……(喂,我知道你可能想杀人,但请不要让与之匹配的眼光朝着我……)对于这样一个超级难题,我们经过研究,决定采用……穷举法来实现(哪来的这么多西红柿?)。

    首先我们研究这个问题的状态是什么——两个加数,不是么,它们是有顺序的,并且可以取0到99的整数。于是乎,我们定义状态类如下(注:STL中有类似的东西,但作为完整的示例,我们亲自手工打造):

  class Pair

  {

  public:

    Pair(int mx = 0, int my = 0): x(mx), y(my) { }


 

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品