回 帖 发 新 帖 刷新版面

主题:数字排列问题,回朔算法(帮帮忙,各位牛人)

问题
     列出所有数字1到数字N的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字.
   输入:n(1<=n<=9)
   输出:由1至N组成的所有不重复的数字序列,每行一个序列。
 
样例输入
  3
样列输出
 1 2 3
 1 3 2
 2 1 3 
 2 3 1
 3 1 2
 3 2 1

我自己按书上编的程序,答案不对,请各位帮忙!
代码如下:


program h;
var
  a:array[1..1000] of longint;
  i, k, c, d, e, n,q:longint;



function  bi(i,k:longint):boolean;
begin
  for c:=1 to k-1 do
begin
  if a[c]<>i then bi:=true
  else
  bi:=false;
end;
end;

procedure find(k:longint);
begin
  if k>n then
begin

  for d:=1 to n do

  write(a[d]);
  writeln;
end
  else

   for e:=1 to n do
begin
if bi(e,k)  then
begin
   a[k]:=e;
   find(k+1);

end;

end;
end;



begin
read(n);
find(1);
end.

回复列表 (共1个回复)

沙发


program sou1;
var a:array[1..100]of integer;
    n,i,x:integer;
    s:set of 1..100;
begin
  readln(n);
  i:=1;a[i]:=0;s:=[];
  repeat
    repeat
      inc(a[i]);
    until (not(a[i]in s)or(a[i]>n));
    if a[i]>n then
    begin
      i:=i-1;s:=s-[a[i]];
    end
    else
    begin
      s:=s+[a[i]];
      if i=n then
      begin
        for x:=1 to n do write(a[x]);
        writeln;
        s:=s-[a[i]];
      end
      else
      begin
        i:=i+1;a[i]:=0;
      end;
    end;
  until i<1;
end.

我来回复

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