【题目描述】
给出一个n, 请输出n的所有全排列(按字典序输出)。
【样例输入】
3
【样例输出】
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
【解题思路】
听说C++有作弊器(求全排列的函数),羡慕不已啊……不过pascal也挺简单的,简单的递归回溯,我用了一个集合保证所有数字不重复,不知哪位神犇能给出更好的办法请写在评论处,谢谢!
【代码实现】

var n,w:longint; a:array[1..10]of longint; b:set of 1..10;//集合存储已用的数字 procedure try(m:longint); var i:longint; begin if m=n then//一个排列生成,输出 begin for i:=1 to n do write(a[i],' '); writeln; end else for i:=1 to n do if not (i in b) then begin inc(w); a[w]:=i; b:=b+[i];//存入a数组,方便输出,并标记 try(m+1);//递归 b:=b-[i]; dec(w);//回溯 end; end; begin readln(n); try(0); end.