题目链接↑
题目描述
从键盘读入一个整数n(n<=6),请输出1~n中所有整数的全排列,按照由小到大输出结果,每组的n个数之间用空格隔开。
全排列的含义:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
如当n=3时,全排列的结果为:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
输入
一个整数n(n >= 1 && n <= 6)
输出
1~n中所有数的全排列的结果,按照由小到大输出,每行n个数
样例输入 复制
3
样例输出 复制
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
AC代码↓
#include<bits/stdc++.h>
using namespace std;
int path[10],n,flag[10];//路径
void dfs(int step)
{
//出口
if(step==n+1)
{
for(int i=1;i<=n;i++)
cout<<path[i]<<" ";
cout<<endl;
return ;
}
//所有可能
for(int i=1;i<=n;i++)
{
if(flag[i]==0)
{
flag[i]=1;//标记
path[step]=i;
dfs(step+1);//调用
flag[i]=0;
}
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}