题目:
题目描述
排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement)。特别地,当m=n时,这个排列被称作全排列(Permutation)。
如n=3,m=2的排列有:
1 2
1 3
2 1
2 3
3 1
3 2输入
输入两个整数n和m(1<=n<=10,1<=m<=n)。
输出
输出所有的排列,每个排列占一行,同一个排列中,两个数之间用一个空格隔开。
样例输入
3 2样例输出
1 2 1 3 2 1 2 3 3 1 3 2
代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[10],used[10];
void dfs(int dep){
if(dep>n){//有效
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}else{
for(int i=1;i<=n;i++){
if(used[i]==0){
a[dep]=i;
used[i]=1;
dfs(dep+1);
used[i]=0;
}
}
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}
思路:
很简单,就是一个简单dfs,输入n然后调用dfs函数,然后用used数组看有没有重复,a数组来输出全排列。