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