题目描述
从键盘读入一个整数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个数
输入数据 1
3
Copy
输出数据 1
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;
int n;
int v[10],a[10];
void dfs(int x){
if(x==n+1){
for(int i = 1; i <= n; i++){
cout << a[i] << " ";//输出每一位
}
cout << endl;
return;
}
for(int i = 1; i <= n; i++){//枚举
if(v[i]==0){//判断i是否被用过
a[x]=i;//放i
v[i]=1;//标记这个数用过了
dfs(x+1);//考虑下一位
v[i]=0;//第x位不选i的情况
}
}
}
int main(){
cin >> n;
dfs(1);
return 0;
}
100 Accepted 11%
# | 状态分数 | 耗时 | 内存占用 |
---|---|---|---|
#0 | Accepted11 | 3ms | 7.6 MiB |
#1 | Accepted100 | ||
#1-1 | Accepted11 | 2ms | 7.2 MiB |
#1-1 | Accepted11 | 2ms | 7.6 MiB |
#2 | 0 | ||
#2-2 | Accepted11 | 2ms | 7.2 MiB |
#2-2 | Accepted11 | 2ms | 7.6 MiB |
#3 | Accepted11 | 2ms | 7.6 MiB |
#4 | Accepted11 | 2ms | 7.2 MiB |
#5 | Accepted11 | 2ms | 7.6 MiB |
#6 | Accepted12 | 3ms | 7.6 MiB |