版权声明:版权归原作者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;
}