主题:菜鸟级的搜索题
mmyy9
[专家分:100] 发布于 2009-08-17 16:43:00
已知一个由N个元素构成的集合,求该集合的所有子集
输入:3 (得到集合A={1,2,3})
输出:1 2 3 12 13 23 123
谢谢
回复列表 (共4个回复)
沙发
小田甜 [专家分:3910] 发布于 2009-08-19 13:58:00
你的样例有一点小问题,因为空集是任意集合的子集,所以,应该还有一个空集。
做题的时候建议用深度优先搜索,穷举每个元素的false->true,然后把所有true的输出即可。
板凳
abcwuhang [专家分:1840] 发布于 2009-08-20 17:36:00
program try;
var n:integer;
used:array [1..1000] of boolean;
procedure print;
var i:integer;
begin
for i:=1 to n do
if used[i] then write(i);
write(' ');
end;
procedure try(x:integer);
var i:integer;
begin
if x=n then print;
for i:=x+1 to n do
if not(used[i]) then
begin
used[i]:=true;
try(i);
used[i]:=false;
end;
end;
begin
readln(n);
fillchar(used,sizeof(used),0);
write(' ');{空集}
try(0);
end.
{没调。}
{提示:n不能太大,否则会爆}
3 楼
1042144576 [专家分:10] 发布于 2009-08-26 17:32:00
O(2^n)的搜索,n在20以内肯定没问题
4 楼
abcwuhang [专家分:1840] 发布于 2009-08-26 17:37:00
O(n!)
P(n)
空间无视,但时间令人头疼。。
我来回复