习题2.8 输出全排列
这个题我是直接用dfs写的,因为这和《啊哈算法》上的放扑克问题一模一样。
详情参考我的搜索博客
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int ans[10];
int mark[10];
int n;
void print(int a,int step)
{
ans[step]=a;
for(int i=1; i<=n; i++)
{
if(!mark[i])
{
mark[i]=1;
print(i,step+1);
mark[i]=0;
}
}
if(step==n-1)
{
for(int i=0; i<n; i++)
{
printf("%d",ans[i]);
}
printf("\n");
}
}
int main()
{
while(~scanf("%d",&n))
{
memset(ans,0,sizeof(ans));
memset(mark,0,sizeof(mark));
for(int i=1; i<=n; i++)
{
mark[i]=1;
print(i,0);
mark[i]=0;
}
}
}