POJ1256 Anagram STL中的next_permutation()
2011-07-31 11:55
405 查看
Problem Address:http://poj.org/problem?id=1256
发现了stl中的next_permutation()是用来计算某个字符串的下一个全排列的。
还有一个prev_permutation(),其作用相反。
对于给定的字符串,按照新的排序规则,输出其全排列。
【非stl版】
【next_permutation()版】
发现了stl中的next_permutation()是用来计算某个字符串的下一个全排列的。
还有一个prev_permutation(),其作用相反。
对于给定的字符串,按照新的排序规则,输出其全排列。
【非stl版】
172K | 79MS | C++ | 822B |
#include <iostream> #include <string> #include <algorithm> using namespace std; int rank[300]; bool cmp (char a, char b) { return rank[a]<rank[b]; } char str[20]; int visited[20]; int len; void dfs(char *t, int k) { if (k==len) { printf("%s\n", t); return; } int i; for (i=0; i<len; i++) { if (visited[i]==0) { visited[i] = 1; t[k] = str[i]; dfs(t, k+1); visited[i] = 0; while(i+1<len && str[i+1]==str[i]) i++; } } } int main() { int t; int i; char temp[20]; for (i=0; i<=26; i++) { rank[i+'A'] = i*2; rank[i+'a'] = i*2+1; } scanf("%d", &t); while(t--) { scanf("%s", str); len = strlen(str); sort(str, str+len, cmp); memset(visited, 0, sizeof(visited)); temp[len] = '\0'; dfs(temp, 0); } return 0; }
【next_permutation()版】
168K | 63MS | C++ | 511B |
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int rank[300]; bool cmp(char a, char b) { return rank[a]<rank[b]; } int main() { int t; int i; char str[20]; int len; for (i=0; i<=26; i++) { rank[i+'A'] = i*2; rank[i+'a'] = i*2+1; } scanf("%d", &t); while(t--) { scanf("%s", str); len = strlen(str); sort(str, str+len, cmp); do { printf("%s\n", str); }while(next_permutation(str, str+len, cmp)); } return 0; }
相关文章推荐
- POJ 1256 Anagram(next_permutation全排列)
- poj1256 Anagram (next_permutation())
- POJ 题目1256 Anagram(next_permutation)
- poj 1256 Anagram—next_permutation的神奇应用
- POJ - 1256 再次熟悉next_permutation
- POJ 1256.Anagram(DFS和STL)
- poj 题目1883 排列(STL----next_permutation)
- poj 1256 按一定顺序输出全排列(next_permutation)
- STL(next_permutation)poj 1833:排列
- 【STL】poj 1256 Anagram
- POJ1061(STL next_permutation)
- next_permutation,POJ(1256)
- 1256 Anagram 全排列 next_permutation 用法
- poj 1256 next_permutation
- poj-1833-排列 stl next_permutation(a,a+n)
- 【STL】next_permutation的原理和使用
- 7.2.2(next_permutation--STL)
- C++ STL, next_permutation用法。
- poj 3187 Backward Digit Sums【next_permutation】
- Anagram poj 1256