Description
列出所有数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现得复数字。
Input
输入:n(1<=n<=9)
Output
由1~n组成的所有不重复的数字序列,每行一个序列。
Sample Input
3
Sample Output
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
解题思路:读入n,然后开始用搜索,结束条件为s>n,输出该组数据并退出,如果dep>n则直接退出。从1到n循环,把x[s]赋值为i,如果g[i]等于0则开始递归,并回溯。
程序:
var
n,m:longint;
x,g:array[0..10] of longint;
procedure try(dep,s:longint);
var
i:longint;
begin
if s>n then
begin
for i:=1 to n do
write(x[i],' ');
writeln;
exit;
end;
if dep>n then exit;
for i:=1 to n do
begin
x[s]:=i;
if g[i]=0 then
begin
g[i]:=1;
try(dep+1,s+1);
g[i]:=0;
end;
x[s]:=0;
end;
end;
begin
readln(n);
try(0,1);
end.