1685: 【递归】n个数的全排列

题目描述

从键盘读入n个整数(每个数都是1~9之间的数),输出这n个整数的全排列(数字不能重复)。

输入格式

第1行输入一个整数n(1<=n<=8)

第2行输入n个不相等的整数(1<=每个数<=9)。

输出格式

输出若干行,每行包括n个数据,表示一种排列方案,所有的排列按字典码从小到大排序输出

样例输入

3
2 4 6

样例输出

2 4 6
2 6 4
4 2 6
4 6 2
6 2 4
6 4 2

AC代码

#include
using namespace std;
int n,a[100001],b[10001],c[10001];
void find(int k){
	if(k==n+1){
		for(int l=1;l<=n;l++){
			printf("%d ",c[l]);
		}
		printf("\n");	 
		return ;
	}else{
		for(int l=1;l<=n;l++){
			if(b[l]==0){
				c[k]=a[l];
				b[l]=1;
				find(k+1);
				c[k]=0;
				b[l]=0;
			}
		}
	}
	
} 
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	sort(a+1,a+n+1);
	find(1); 
	return 0;
}

 

你可能感兴趣的:(算法)