您的位置:首页 > 其它

全排列

2016-03-11 01:46 239 查看
全排列等价于:将N个牌放到N个盒子中

#include<iostream>
using namespace std;
int a[10],book[10],n;//全局变量默认初始化为0 ,book标记是否牌在手中
void dfs(int step)//step表示现在站在第几个盒子面前
{
int i;
if(step==n+1)//如果站在n+1个盒子面前,表示前面的n个盒子都已经放好了
{
for(i=1;i<=n;i++)
cout<<a[i];
cout<<endl;
return ;//返回之前的一步(最近一次调用dfs的地方) 注意在走完所有的盒子时候step==n+1一定立刻return;

}
for(i=1;i<=n;i++)
{
if(book[i]==0)//表示第i个牌仍在手
{
a[step]=i;//将i号扑克牌放入第step个盒子中
book[i]=1;//表示第i个扑克牌不在手上了
dfs(step+1);//第step个盒子放好牌,接下来走到下一个盒子面前
book[i]=0;//非常重要的一步,一定要将刚才尝试的扑克牌收回,才能进行下一次尝试</span>。
}
}

}
int main()
{
cin>>n;
dfs(1);	//首先站在第1个盒子面前</span>
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: