Description
Input
Output
Sample Input
bbjd
Sample Output
bbdj bbjd bdbj bdjb bjbd bjdb dbbj dbjb djbb jbbd jbdb jdbb
题目大意:给出一串字符串,要求输出其不重复的全排列,要求起全排列从小到大。
解题思路:因为输出的全排列要求从小到大,所以先对起始字符串进行排序,之后用递归和DFS的思想输出其全排列序列。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int vis[205], len;
char ch[205], temp[205];
void print(int cnt) {
char c = 0;
if (cnt == len) {
printf("%s\n", temp);
return;
}
for (int i = 0; i < len; i++) {
if (!vis[i] && c != ch[i]) { //实现不重复输出同一节点,并对不同的相同值节点进行处理
temp[cnt] = ch[i];
c = temp[cnt];
vis[i] = 1; //标记 正在访问
print(cnt + 1);
vis[i] = 0; //释放
}
}
}
int main() {
memset(ch, 0, sizeof(ch));
memset(temp, 0, sizeof(temp));
memset(vis, 0, sizeof(vis));
scanf("%s", ch);
len = strlen(ch);
sort(ch, ch + len);
print(0);
return 0;
}
POJ 1731 Orders(带重复字母的全排列 + 暴力)
原文地址:http://blog.csdn.net/llx523113241/article/details/43056287