阅读下列说明和流程图。回答问题 1 和 2,把解答填入答卷的对应栏内。
有一个集合,集合中有 n 个元素,每个集合元素都是正整数,它们存放在一维数组A中,每个数组元素存放一个集合元素。对给定的整数 total(假定集合中每个元素的值均小于 total),流程图求出所有满足下列条件的子集:子集中各元素之和等于 total。
本题在使用试探法找出全部解答的过程中,依次选取当前的候选元素,尝试组成一个小于 total 的部分和,如果合适,则选取下一元素试探;若不合适,则回溯取另一个候选元素尝试,题中利用 s 栈存放候单元素的下标,用它实现回溯。如果候选元素加上部分和等于 total ,则表示找到一个解答,然后通过回溯,再试探寻找其它的解答。
[问题1]
问流程图中的 ④ 应与 A~D 中的那一点相连,并填充图中的①~③,使之成为完整的流程图。
[问题2]
设 total=10,n=6,数组 A 中各元素的值为(8,4,1,2,5,3)。
若图中的(1)框改为 sp:0,则执行该流程图后输出什么结果。
[流程图]
答案:
[问题1]
① i→s[sp] ② T+A[s[sp]]→T ③ s[sp]+1 ④ D
[问题2]
J=1时输出的解为:82
4123
415
253
J=2时输出的解为:4123
415
253
J=3时输出的解为:253
J=4时输出的解为:253
J=5,6时无解