递归练习:全排列

版权声明:版权归原作者CangyeChen所有,未经原作者允许不得转载本文内容,否则将视为侵权,转载或者引用本文内容请注明来源及原作者,对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等 https://blog.csdn.net/CANGYE0504/article/details/89255652

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

这种题目需要典型的递归手段,在一般的面试题目中也会经常出现。

递归的题目在设计的时候要注意递归边界和递归条件。按这样的框架去设计算法不容易再无穷的递归中迷失自我。

以下是我的程序,请参考:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn =11;
int n,P[maxn],hashTable[maxn] = {false},num=0;
void qpl(int index)
{
	//边界条件
	if(index == n+1)
	{
		for(int i=1;i<=n;i++)
		{
			printf("%d",P[i]);
		}
		num++;
		printf("\n");
		return;
	 } 
	 
	 for(int i=1;i<=n;i++)//填入1-n位位置 
	 {
	 	if(hashTable[i]==false)
	 	{
	 		P[index]=i;
	 		hashTable[i]=true;
	 		qpl(index+1);
	 		hashTable[i]=false;
		 }
	 }
	
 } 
int main()
{
	scanf("%d",&n);//输入位数,位数初始小于11 
	qpl(1);
	printf("\nThe cout is %d\n",num);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CANGYE0504/article/details/89255652
今日推荐