本题是给定字符串的全排列,数字的全排列看此处
题目描述
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有 ‘a’ < ‘b’ < … < ‘y’ < ‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。
输入格式
输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在 1 到 6 之间。
输出格式
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
Sample Input
abc
Sample Output
abc
acb
bac
bca
cab
cba
本题和数字的全排列同曲同工,用一个递归+回溯即可:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include <algorithm>
#include<string.h>
#include<queue>
#include<math.h>
#include<set>
#define llu unsigned long long
using namespace std;
int n;
char a[10],b[10],vis[10];
void fun(int num)
{
if(num==n){
for(int i=0;i<n;i++)
cout << b[i] ;
cout << endl ;
}
for(int i=0;i<n;i++)
{
if(vis[i]==0){
vis[i]=1;
b[num]=a[i];
fun(num+1);
vis[i]=0;//回溯
}
}
}
int main()
{
cin >> a ;
n=strlen(a);
fun(0);
return 0;
}