/*
全排列
给你一个数字n,让你输出从1到n的所有排列,输出要求按照字典序的规则去排列
(2<=n<=9)
输入第一行一个整数T(1<=T<=9)
接下来T行,每行输入一个整数n(2<=n<=0)
输出 对于每一个输入的数据,输出其对应的全排列,要求符合字典序规则
样例输入
1
3
样例输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
*/
#include<bits/stdc++.h>
using namespace std;
int a[105];
int flag[105];//标志位
int n;
void dfs(int step)
{
if(step>n)
{
for(int i=1; i<=n; i++)
printf("%d ",a[i]);
printf("\n");
return ;//结束当前递归!
}
for(int i=1;i<=n;i++)
{
if(!flag[i])//判断i号扑克牌是否收回,已收回的话进行下面操作
{
a[step]=i;//将i号扑克牌放入第step个盒子中
flag[i]=1;// 置1表示第i号扑克牌不在手中
dfs(step+1);//递归调用,进行下一个盒子的处理
flag[i]=0;// 非常重要,收回该盒子中的扑克牌才能进行下一次尝试。
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
scanf("%d",&n);
memset(flag,0,sizeof(flag));
dfs(1);
}
return 0;
}
用DFS(深度优先搜索)解决全排列问题
猜你喜欢
转载自blog.csdn.net/Jason6620/article/details/89220109
今日推荐
周排行