全排列
Time limit:1000 ms Memory limit:131072 kB
Problem Description
给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = “1312”,
输出为:
1123
1132
1213
1231
1312
1321
2113
2131
2311
3112
3121
3211
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int vis[15], len; char a[15], b[15]; void dfs(int l) { if (!(len - l)) { for (int i = 0; i < l; i++) printf("%c", b[i]); printf("\n"); return ; } for (int i = 0; i < len; i++) { if (!(vis[i] || (i > 0 && vis[i - 1] == 0 && a[i] == a[i - 1]))) { vis[i] = 1; b[l] = a[i]; dfs(l + 1); vis[i] = 0; } } } int main() { scanf("%s", a); len = strlen(a); sort(a, a + len); dfs(0); return 0; }
转载请标明出处:全排列
文章来源: 全排列