回 帖 发 新 帖 刷新版面

主题:菜鸟级的搜索题

已知一个由N个元素构成的集合,求该集合的所有子集
输入:3 (得到集合A={1,2,3})
输出:1 2 3 12 13 23 123
谢谢

回复列表 (共4个回复)

沙发

你的样例有一点小问题,因为空集是任意集合的子集,所以,应该还有一个空集。
做题的时候建议用深度优先搜索,穷举每个元素的false->true,然后把所有true的输出即可。

板凳

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 楼

O(2^n)的搜索,n在20以内肯定没问题

4 楼

O(n!)
P(n)
空间无视,但时间令人头疼。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册