全排列模板

洛谷 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;
}
  • 这里的话就先定义一个函数,用来排列搜索所有情况(从头扫一遍)。
  • 然后,你也看到了,主程序就那么一丢丢/手动滑稽/
posted @ 2019-12-12 21:23  orange_lyc  阅读(111)  评论(0编辑  收藏  举报