排列数字(全排列问题)
PS:dfs最重要的一点就是用什么顺序去遍历所有的方案
分析:
给定3个空格
往里面填数,使这里的那个数不等于前面那个数字
Ac Code:
//全排列问题
#include <iostream>
using namespace std;
int n,p[10];
bool is[10];//看看这个点有没有被用过
void dfs(int x)
{
if(x==n) //如果有方案了,就输出
{
for(int i=0;i<n;i++) cout<<p[i]<<' ';
cout<<endl;
return ;
}
//
for(int i=1;i<=n;i++)
{
if(!is[i])//如果i没有被填过
{
p[x]=i;//把i填进去
is[i]=true;//把第i个数标记为用过
//处理
dfs(x+1);//用x++的话,一会还要x--,所以就用x+1省事
//搜索下一层
is[i]=false;
//回溯(回复原来递归下一层前的现场)
}
}
}
int main()
{
cin>>n;
dfs(0);//从0开始
return 0;
}