1283: 【例】【基础】全排列的结果

内存限制:16 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:13 解决:11

题目描述

从键盘读入一个整数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

提示


#include<bits/stdc++.h>
using namespace std;
#define N 7
int n;int path[N];bool used[N];
void print(){
	for(int i=1;i<=n;i++){
		cout<<path[i]<<' ';
	}
	cout<<endl;
}
void dfs(int x){
	if(x>n){
		print();
		return;
	}
	for(int i=1;i<=n;i++){
		if(!used[i]){
			path[x]=i;
			used[i]=true;
			dfs(x+1);
			used[i]=false;
		}
	}
}

int main(){
	cin>>n;
	dfs(1);
	return 0;
}


使用内置 next_permutation 函数:

#include<bits/stdc++.h>
using namespace std;
int a[10];

int main(){
    int n;
    cin>>n;
    for (int i=1;i<=n;i++) a[i]=i;
    do{
    	for (int i=1;i<=n;i++) printf("%d ",a[i]);
    	cout<<endl;
	}while (next_permutation(a+1,a+n+1));
	return 0;
}