算法实现思路
递归解决问题的方法就是将一个大问题不断分解成小问题,直到小问题很容易解决为止
先看全排列怎么分解成小问题:
假设要全排列“ABC”,先把A作为前部不变,全排列BC,同样将B作为前部,全排列C,显然是它本身
于是大问题变成了很容易解决的小问题了
如图所示
代码如下
/*
* 全排列算法(递归实现)
* author RogerNO1
*/
#include <iostream>
#include<string>
using namespace std;
void Permutations(char *pre, int level, char * data,int n)
{
level++;//递归层次增加;
if(n==1){//要排列的序列长度为1时,打印一种排序
cout<<pre<<data<<endl;
}else{
int i=0;
while(data[i]!='\0'){
pre[level-1]=data[i];pre[level]='\0';//前部增长
char * data2=new char[n-1];//新数组保存要排序的后部
int j,p=0;
for(j=0;j<n;j++){
if(i==j)continue;
data2[p++]=data[j];
}
data2[p]='\0';
Permutations(pre,level,data2,n-1);
i++;
}
}
}
int main()
{
char * data="ABCD";
char *pre=new char[4];//pre用来保存不变的前部 如ABCD,ABDC,AB不变
int level=0;//递归的层次
Permutations(pre,level,data,4);
return 0;
}