程序设计实习(II):算法设计 16 深度优先搜索.pptxVIP

  • 1
  • 0
  • 约2.72千字
  • 约 25页
  • 2018-01-30 发布于浙江
  • 举报

程序设计实习(II):算法设计 16 深度优先搜索.pptx

程序设计实习(II):算法设计 16 深度优先搜索

程序设计实习;内容提要;枚举;枚举;搜索:复杂的、高级的枚举;搜索与递归;搜索的过程;搜索的难点;影响搜索效率的因素;深度优先搜索;例题: POJ1011 木棒问题;输入数据 由多个案例组成,每个案例包括两行。第一行是一个不超过64的整数,表示裁截之后共有多少节木棒。第二行是经过裁截后,所得到的各节木棒的长度。在最后一个案例之后,是零。 输出要求 为每个案例,分别输出木棒的可能最小长度,每个案例占一行。 输入样例 9 5 2 1 5 2 1 5 2 1 4 1 2 3 4 0 输出样例 6 5;解题思路;还原过程;状态演化规则;提高搜索效率;D=L时(A2 B+1 C-1 D2)不能演化出目标状态;D=X1时(A2 B+1 C-1 D2)不能演化出目标状态; 规划拼接顺序;#include vector #include iostream #include algorithm using namespace std; class CStickType { public: int length; int number; CStickType(int len); bool operator(const CStickType s); bool operator==(const CStickType s); bool operator(int x); }; CStickType::CStickType(int len) { length = len; number = 1; };bool CStickType::operator(const CStickType s) { return lengths.length; } bool CStickType::operator==(const CStickType s) { return length==s.length; } bool CStickType::operator(int x) { return lengthx || number==0; } vectorCStickType sticks; int stickTotal, typeTotal, l_max, l_min, cutPart, usedSticks; ;bool recover_original(int candidate) { int curCutPart, curUsedSticks, selected; curCutPart = cutPart; curUsedSticks = usedSticks; while ( candidatetypeTotal ) { //从剩余的木棒中,寻找长度不超过cutPart的最长木棒 if ( sticks[candidate]cutPart ) { candidate++; continue; } selected = candidate; sticks[selected].number--; cutPart = cutPart - sticks[selected].length; usedSticks++; //恰好拼接完全部木棒 if ( cutPart==0 usedSticks==stickTotal ) return true; //拼接成功一根长度为l_min的木棒 if ( cutPart == 0 ) { cutPart = l_min; candidate = 0; } ; //用完了全部木棒,无法继续拼接 if ( usedSticks==stickTotal ) { sticks[selected].number++; cutPart = curCutPart; usedSticks = curUsedSticks; return false; } //继续拼接剩余的木棒 if ( recover_original(candidate) ) return true; //选择下一个长度的木棒重新拼接 sticks[selected].number++; //剪枝:不要尝试替换第一根木棒;至少要替换两根木棒 if ( curCutPart == l_min || curCutPart==sticks[selected].length ) return false; cutPart = curCutPart; usedSticks = curUsedSticks; candidate++; } return false; };int main() {

文档评论(0)

1亿VIP精品文档

相关文档