关于字符的全排列问题也是有很多算法的,今天我就来介绍递归的Perm算法。直接看题吧。。。
给定一字符串,可能含有相同元素。请借助递归设计算法求出该字符串的所有不同的排序。
输入格式:
给定一串字符串(长度小于等于9,且至少有3个字符相同)。
输出格式:
每行输出一个字符串。按照字典序递增的顺序输出,每个排列占一行。
最后一行输出不同排列的个数。
题目大体意思就是要我们求一个字符串的全排列,说到递归,那么Perm算法出来了,Perm算法核心思想是把m个待排元素每一个依次拿到首位,剩下的m-1个组成新的待排元素传入Perm进行相同的操作……….以此类推,直到元素递归到只有一个了,就依次打印出来 形成一个排列
先上算法的核心部分:
void Perm(char b[],int low,int high,int& n)//这里把待排序元素放入char型数组b中,待排元素起始下
//标为low,末尾下标为high,n用来计有多少种不同的排列组合
{
if(low == high) //如果递归排到只有最后一个元素,就按序打印出来
{
for(int i = 0;i < low;i++)
{
printf("%c",b[i]);
}
n++; //打印一次计数值加1