c语言程序全排列算法思路,深入全排列算法及其实现方法

全排列在很多程序都有应用,是一个很常见的算法,常规的算法是一种递归的算法,这种算法的得到基于以下的分析思路。  给定一个具有n个元素的集合(n>=1),要求输出这个集合中元素的所有可能的排列。

一、递归实现例如,如果集合是{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)的所有排列有下面的排列组成:

(1)以a开头后面跟着(b,c,d)的排列

(2)以b开头后面跟着(a,c,d)的排列

(3)以c开头后面跟着(a,b,d)的排列

(4)以d开头后面跟着(a,b,c)的排列,这显然是一种递归的思路,于是我们得到了以下的实现:

#include "iostream"

using namespace std;

void permutation(char* a,int k,int m)

{

int i,j;

if(k == m)

{

for(i=0;i<=m;i++)

cout<

cout<

}

else

{

for(j=k;j<=m;j++)

{

swap(a[j],a[k]);

permutation(a,k+1,m);

swap(a[j],a[k]);

}

}

}

int main(void)

{

char a[] = "abc";

cout<

你可能感兴趣的:(c语言程序全排列算法思路)