#include "stdio.h"
#include "iostream"
#include "string.h"
using namespace std;
void Perm(char list[], int k, int m)//递归产生所有前缀是list[0:k-1],后缀是list[k:m]的全排列
{//产生list[k:m]的所有排列
if(k==m) //只剩下一个元素
{
int i;
for(i=0; i<=m; i++)
cout<<list[i];
cout<<endl;
}
else
{
for(int i=k; i<=m; i++) //递归产生排列
{
swap(list[k], list[i]); //将每一个元素分别与list[k]置换
Perm(list, k+1, m); //递归计算list[k+1:m]的全排列,将计算结果作为list[0:k]的后缀
swap(list[k], list[i]); //还原,为下次递归做准备
}
}
}
void swap(char &a, char &b)
{
char temp = a;
a = b;
b = temp;
}
int main()
{
int len;
char s[10];
scanf("%s", s);
len = strlen(s);
Perm(s, 0, len-1);
return 0;
}
排列问题
最新推荐文章于 2022-01-18 23:33:06 发布