1283: 【例】【基础】全排列的结果
内存限制:16 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:13
解决:11
题目描述
从键盘读入一个整数n(n<=6),请输出1~n中所有整数的全排列,按照由小到大输出结果,每组的n个数之间用空格隔开。
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
全排列的含义:从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;
}