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) { }
|
正在阅读:经验分享:闲谈C++算法封装之穷举法经验分享:闲谈C++算法封装之穷举法
2004-03-26 10:05
出处:CSDN
责任编辑:linjixiong
键盘也能翻页,试试“← →”键