全排列模板
洛谷 P1706 全排列问题
题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式
n(1≤n≤9)
输出格式
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个场宽。
输入输出样例
输入
3
输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n, m=0;
int a[10];
bool vis[25];
void q()
{
if(m==n)
{
for(int i=0; i<n; i++) printf("%5d", a[i]);
printf("\n");
}
for(int i=1; i<=n; i++)
{
if(vis[i]==0)
{
vis[i]=1;
a[m++]=i;
q();
m--;
vis[i]=0;
}
}
}
int main()
{
scanf("%d", &n);
q();
return 0;
}
- 这里的话就先定义一个函数,用来排列搜索所有情况(从头扫一遍)。
- 然后,你也看到了,主程序就那么一丢丢/手动滑稽/