欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

全排列(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;
} 

全排列(dfs)

相关标签: 算法竞赛

上一篇: 约瑟夫问题(queue)

下一篇: