全排列(dfs)
程序员文章站
2024-02-21 12:16:10
...
从n个不同的元素中任取m(m<=n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
今天这道题目很简单就是给你一个整数n,计算[1,n]所有数字的排列组合。
输入格式
第一行输入一个整数n(1<=n<=10)
输出格式
第一行输出一个全排列的方案总数m。
接下来按照字典序依次输出这m个排列。
样例输入:
3
样例输出
6
123
132
213
231
312
321
分析:首先方案数可以用阶乘算出来,n的排列方案数就等于n的阶乘,然后用dfs去选择数,并且把已选择的数进行标记
#include<iostream>
using namespace std;
int n,cnt=1;
bool vis[100];
void dfs(int x,int k)//x表示当前数,k表示选择了第k个数
{
if(k>=n){//当所有的数都选择了也就是组成了一个排列数 ,递归出口
cout<<x<<endl;
return;
}
for(int i=1;i<=n;i++){//依次选择第i个数
if(!vis[i]){
vis[i]=true;
dfs(x*10+i,k+1);
vis[i]=false;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cnt*=i;//n的阶乘,算出方案数
}
cout<<cnt<<endl;
dfs(0,0);
return 0;
}
上一篇: 约瑟夫问题(queue)