[题目描述]
输出自然数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
[思路分析]
本体只是在生成序列问题上简做修改,就可得出答案
[参考程序]
var a,b:array[1..5000]of longint;
v:array[1..5000]of boolean;
i,j,k,l,m,n,t,num,tail:longint;
procedure qs;
var i,j:longint;
q:longint;
begin
for i:=1 to n-1 do
begin
for j:=i+1 to n do
begin
if a[i]>a[j] then
begin
q:=a[i];
a[i]:=a[j];
a[j]:=q;
end;
end;
end;
end;
procedure print;
var i,j,k:longint;
begin
for i:=1 to n-1 do
write(b[i],' ');
writeln(b[n]);
end;
procedure dfs(k:longint);
var i,j,l:longint;
begin
if v[k] then
begin
v[k]:=false;
num:=num+1;
b[num]:=a[k];
if num=n then
print;
if num<>n then
for i:=1 to n do
dfs(i);
v[k]:=true;
num:=num-1;
end;
end;
begin
//readln(t);
{for l:=1 to t do
begin
n:=0;
if l<>1 then
readln;
while not eoln do
begin
inc(n);
read(a[n]);
end;
qs;
//dec(n);}
readln(n);
num:=0;
tail:=0;
for i:=1 to n do
a[i]:=i;
fillchar(v,sizeof(v),true);
for k:=1 to n do
dfs(k);
// writeln;
//end;
end.