- 1
- 0
- 约2.72千字
- 约 25页
- 2018-01-30 发布于浙江
- 举报
程序设计实习(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() {
您可能关注的文档
最近下载
- 常州大学《大学英语一》2024-----2025学年期末试卷(A卷).pdf VIP
- 艾米克变频器AMK3100中文说明书使用手册.pdf
- 必背古诗词75首(可打印) .pdf VIP
- 某知名汽车维修企业员工手册范本.docx VIP
- 2025年二建水利b证考试真题及答案.docx
- 安全驾驶教育培训课件.ppt VIP
- 汽车维修车间员工职责手册.docx VIP
- 黑龙江省哈尔滨市第三中学校2025-2026学年高二上学期9月月考物理试卷.docx VIP
- 初中语文名著导读--《骆驼祥子》知识点总结归纳.docx VIP
- 实施指南(2025)《DAT 22-2015 归档文件整理规则》.pptx VIP
原创力文档

文档评论(0)