排列組合 算法


生成1..n的全排列
program fullpermutation;
var
  n:integer;
  a:array[1..20] of integer;
  used:array[1..20] of boolean;
procedure search(k:integer);
var
  i:integer;
begin
  if k>n then
    begin
      for i:=1 to n do
        write(a[i],' ');
      writeln;
    end
  else
    begin
      for i:=1 to n do
        if not used[i] then
          begin
            used[i]:=true;
            a[k]:=i;
            search(k+1);
            used[i]:=false;
          end;
    end;
end;
begin
  read(n);
  fillchar(used,sizeof(used),false);
  search(1);
end.
生成1..n的r個數的組合
program combination;
var
  n,r:integer;
  a:array[0..20] of integer;
procedure search(k:integer);
var
  i:integer;
begin
  if k>r then
    begin
      for i:=1 to r do
        write(a[i],' ');
      writeln;
    end
  else
    for i:=1 to n do {a[k]>a[k-1]且a[k]-(k-1)<=n-(r-2)}
      if (i>a[k-1]) and (i-(k-1)<=n-(r-2)) then
        begin
          a[k]:=i;
          search(k+1);
        end;
end;
begin
  read(n,r);
  a[0]:=0;
  search(1);
end.

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



C++ 排列組合 排列組合算法 關於各種排列組合java算法 排列組合算法 排列組合與回溯算法 排列組合算法 排列組合算法 排列組合回溯算法 排列組合算法 排列組合算法
 
粤ICP备14056181号  © 2014-2020 ITdaan.com