题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入
输入 n(1≤n≤9)
输出
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字占5列。
样例输入
4
样例输出 Copy
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 1 4 3
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
思路
使用dfs实现暴力遍历输出,用一个flag数组标记元素是否被使用过。当使用过就遍历下一个元素,保证不重复,实现全排列
代码
#include"bits/stdc++.h"
using namespace std;
int a[10],flag[10],n,m,b[10];
void dfs(int now){
if(now==n){
for(int i=0;i<n;i++){
cout<<" "<<a[i];
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++){
if(flag[i]==0){
flag[i]=1;
a[now]=i;
dfs(now+1);
flag[i]=0;
}
}
}
int main(){
cin>>n;
dfs(0);
}