问题分析:
实际每种排列组合的过程是树的深度遍历过程!用到了回溯法
#include <bits/stdc++.h>
using namespace std;
int n;
int box[20],visit[20];//box数组用来存储组合情况,visit数组用于检验当前数字是否访问过
void dfs(int step){
if(step == n){
for(int i = 0;i < n;i++){
printf("%5d",box[i]);
}
cout << endl;
}
for(int i = 1;i <= n;i++){
if(visit[i] == 0){
box[step] = i;
visit[i] = 1;
dfs(step + 1);
visit[i] = 0;
}
}
}
int main(){
cin >> n;
dfs(0);
return 0;
}