1.PAT
2. SDUT-OJ http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/4165.html
#include<bits/stdc++.h>
using namespace std;
int num[200],book[200];
int top = 0,n;
void dfs(int step){
if(step==n+1){
for(int i=0;i<n;i++){
cout<<num[i];
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(!book[i]){
num[top++] = i;
book[i] = 1;
dfs(step+1);
top--;
book[i] = 0;
}
}
}
void swap(int *p,int *q){
int t;
t =*p;
*p = *q;
*q = t;
}
void dfs2(int num[],int step){
if(step==n){
for(int i=1;i<=n;i++){
cout<<num[i];
}
cout<<endl;
return;
}
for(int i=step;i<=n;i++){
swap(&num[i],&num[step]);
dfs2(num,step+1);
swap(&num[i],&num[step]);
}
}
int main(){
//Solution ss;
//int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>num[i];
dfs2(num,1);
}