全排列的过程相当于将要进行全排列的元素分别放入一个盒子的过程
#include<iostream>
using namespace std;
//a相当于一个盒子
int a[100],c[100];
int n;
//book为标记当前盒子是否存放了数字
int book[100];
void dfs(int step)
{
if(step==n)//所有的盒子中都有数字
{
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return ;//一定要返回哦~
}
for(int i=0;i<n;i++)
{
if(book[i]==0)//盒子空了(可以存放数字了)
{
book[i]=1;//标记盒子中存放了数字
a[step]=c[i];//第step步的盒子存放了数字
dfs(step+1);
book[i]=0;//回溯将盒子中的数字拿出
}
}
return ;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>c[i];//输入要排列的数字
book[i]=0;
}
dfs(0);
}
从此我们可以引出一个深度优先搜索的基本模型
void dfs(int step)
{
判断边界
尝试每一种可能 for(int i=1;i<=n;i++)
{
继续下一步 dfs(step+1);
}
返回
}