如何模拟出5个人站在一排所有站法?写出一个5层循环好像就可以了,但是如果是n个人呢,我们不可能每次写一个n层循环。但是深度优先搜索,可以很容易实现这个问题。
输入:每次给定一个n,代表n个人,n个人编号是从1到n
输出:模拟所有站法。//用搜索实现全排列。
#include
#include
//#include
#include
using namespace std;
void dfs(int i);
const int maxn = 100;
int num[maxn];
int map[maxn];
int cop[maxn];
//stack a;
int ans,n;
int main()
{
while(~scanf("%d",&n)) //n个人
{
for(int i=1;i<=n;++i)
{
num[i]=i; //第i个人的编号设置为i
map[i]=1;
}
dfs(1); //从第一开始搜索
printf("%d\n",ans);
ans=0;
}
return 0;
}
void dfs(int i)
{
if(i==n+1) //搜索到 n+1个人的时候停止搜索
{
for(int i=1;i<=n;++i)
{
printf("%d ",cop[i]);
}
printf("\n");
ans++;
return ;
}
for(int j=1;j<=n;++j)
{
if(map[j]==1)
{
map[j]=0;
cop[i]=num[j];
dfs(++i);
i--;
map[j]=1;
}
}
}