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); }