算法思路:给定一个数n,调用DFS函数输出1~n这n个数的全排列,用一个book数组标记数i是否已经在排列中,当n个数全部排列好时输出排列,并将标记位book[i]置0进行回溯,直到输出所有排列。
#include<iostream>
using namespace std;
int a[101],book[101],n;
void DFS(int step){
if(step==n+1){ //n个数已全部排列,输出数组a
for(int i=1;i<n;i++){
cout<<a[i];
}
cout<<a[n]<<endl;
return;
}
for(int i=1;i<=n;i++){ //依次检查数1~n是否排列
if(book[i]==0){ //若数i未排列
a[step]=i;
book[i]=1;
DFS(step+1); //继续排列第step+1个位置
book[i]=0; //回溯
}
}
}
int main(){
cout<<"请输入待排列数的个数"<<endl;
cin>>n;
DFS(1);
return 0;
}