全排列问题pascal

来源:百度知道 编辑:UC知道 时间:2024/06/17 13:34:22
var c,i,j,d,n,k:integer;
a:array[1..10]of integer;
procedure gf;
begin
c:=0;
for j:=1 to k-1 do
if i<>a[j] then c:=c+1;
end;
procedure find(k:integer);
begin
if k>n then
begin
for d:=1 to n do write(a[d],' ');
writeln;
end
else
for i:=1 to n do
begin
gf;
if c=k-1 then
begin
a[k]:=i;
find(k+1);
end;
end;
end;
begin
readln(n);
find(1);
end.
错哪了?
gf是个测试时否与前面所有数不同的过程,本题我用回溯做的

var
t,n:integer;
a:array[1..10]of integer;
b:array[1..10]of boolean;
procedure print;
var i:integer;
begin
for i:=1 to n do write(a[i],' ');
writeln;
end;
procedure try(i:integer);
var j:integer;
begin
if i=n+1 then print
else for j:=1 to n do
if b[j]=true then
begin
a[i]:=j;
b[j]:=false;
try(i+1);
b[j]:=true;
end;
end;
begin
readln(n);
for t:=1 to n do b[t]:=true;
try(1);
end.
我也是用回溯做的