题目:
输入一个整数,输出1—N种全排列
input:
3
Sample Output
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
分析
深度搜素:将n看做n个盒子,一次处理每一个盒子,规定每个盒子按照1-n的顺序填数字,
#include<iostream>
//深度搜索尝试所有情况
using namespace std;
int n;
int ans = 0;
int arr[100],book[100];//标记是否用过
void dfs(int step)//step表示当前处理哪一个盒子
{
if(step==n+1)//当处理到n+1的盒子的时候,输出n个盒子的排列顺序
{ ans++;
for(int i=1;i<step;i++)
{
cout<<arr[i]<<' ';
}
cout<<endl;
}
for(int i=1;i<=n;i++)
{
if(book[i]==0)//判断i数字是否还在手里
{
arr[step] = i;//将i数字放入step的盒子里
book[i] = 1;//将i标记,表示已经用过
dfs(step+1);//处理下一个盒子
book[i] = 0;//取消标记,回溯
}
}
return ;
}
int main()
{
cin>>n;
dfs(1);
cout<<"共"<<ans<<"种排列方式";
return 0;
}