全排列算法现在在很多的程序中需要使用,而且也是一个非常重要且常见的算法,其实全排列算法是一种非常典型的递归算法。
接下来我就用我所理解的全排列递归算法给大家讲一下:
这样的算法的得到基于下面的分析思路。 给定一个具有N个元素的集合(N>=1),然后要求输出这个集合中各个元素的全部可能的排列。其中排列的可能性为N!种。
递归算法实现:
比如,我们假设集合是{A,B,C},那么这个集合中元素的全部排列就是{(A,B,C),(A,C,B),(B,A,C),(B,C,A),(C,A,B),(C,B,A)},显然,我们给定N个元素集合就会拥有N!种不同的排列,假设在给定集合为{A,B,C,D},然后我们用以下算法来分析此集合可以产生的全部排列,即集合(A,B,C,D)的全部排列有以下的排列组成:
- 首先我们以集合首元素‘A’开头,然后进行对后面跟着对集合{B,C,D}进行全排列;
- 其次我们再以集合元素‘B’开头,然后进行对集合{A,C,D}进行全排列;
- 然后我们再以集合元素‘C’开头,然后进行对集合{A,B,D}进行全排列;
- 最后我们以集合元素‘D’开头,然后进行对集合{A,B,C}进行全排列。
这样我们就会很容易的看出来这是一种递归的思路。接下来我们就用代码对它进行简单的实现:
#include<iostream>
#include<assert.h>
#include<string.h>
using namespace std;
int count=0;//用一个计数器来及全排列的次数
v