poj1256 dfs(全排列)
来源:互联网 发布:百度词条优化 编辑:程序博客网 时间:2024/05/16 17:10
题意:给定字符串(长度最大为13),字母可能有重复,要求按升序输入其所有的全排列,注意,字母的大小顺序为A<a<B<b<...<Z<z
算法:
1.dfs
2.STL
/*算法:dfs */#include <iostream>#include <algorithm>#include <string.h>using namespace std;char c[20];// 存储输入的字符串 char ans[20];// 存放结果 int cnt[100];// 存放每个字母出现的次数 bool cmp(const char &a, const char &b){if (a >= 'A' && a <= 'Z' && b >= 'A' && b <= 'Z'){return a < b;}else if (a >= 'a' && a <= 'z' && b >= 'a' && b <= 'z'){return a < b;}else if (a >= 'A' && a <= 'Z' && b >= 'a' && b <= 'z'){return a + 32 <= b ;}else if (a >= 'a' && a <= 'z' && b >= 'A' && b <= 'Z'){return a < b+32;}}void dfs(int curr, int n){if (curr == n){ans[n] = '\0';cout << ans << endl;return;}for (int i=0; i<n; i++){// 如果c[i]==c[i-1],为了避免重复枚举,即相同的值只枚举一次,故c[i]不再枚举 if (i == 0 || c[i] != c[i-1]){if (cnt[c[i]-'A'] > 0){cnt[c[i]-'A']--;ans[curr] = c[i];dfs(curr+1,n);cnt[c[i]-'A']++;}}}}int main(){int cases;cin >> cases;for (int i=0; i<cases; i++){cin >> c;int len = strlen(c);sort(c,c+len,cmp);memset(cnt,0,sizeof(cnt));for (int i=0; i<len; i++){cnt[c[i]-'A']++;}dfs(0,len);}}
/*算法:STL */#include <iostream>#include <algorithm>#include <string.h>using namespace std;bool cmp(const char &a, const char &b){if (a >= 'A' && a <= 'Z' && b >= 'A' && b <= 'Z'){return a < b;}else if (a >= 'a' && a <= 'z' && b >= 'a' && b <= 'z'){return a < b;}else if (a >= 'A' && a <= 'Z' && b >= 'a' && b <= 'z'){return a + 32 <= b ;}else if (a >= 'a' && a <= 'z' && b >= 'A' && b <= 'Z'){return a < b+32;}}int main(){int cases;char c[20];cin >> cases;for (int i=0; i<cases; i++){cin >> c;int len = strlen(c);sort(c,c+len,cmp);cout << c << endl;while(next_permutation(c, c+len, cmp)) {cout << c << endl;}}}
0 0
- poj1256 dfs(全排列)
- poj1256(全排列)
- POJ1256--全排列
- [排列]poj1256
- 全排列 DFS实现
- 全排列 DFS实现
- dfs全排列
- DFS实现全排列
- DFS之全排列
- uva10344(全排列+dfs)
- DFS之全排列
- 全排列 DFS
- DFS之全排列
- 全排列(DFS)
- dfs全排列
- DFS实现全排列
- 全排列 DFS 回溯
- 全排列(dfs)
- java网络编程
- VS2015官方ISO下载地址
- 【杭电-oj】-2007-平方和与立方和
- 状态压缩
- Android Service完全解析,关于服务你所需知道的一切(下)
- poj1256 dfs(全排列)
- CListCtrl Checkbox 被点击消息捕获 判断单击 click响应 单击消息 单击状态
- 树的子结构
- bzoj 3037(树形DP)
- POJ 3187 Backward Digit Sums【杨辉三角】【全排列】
- FZU 2193 So Hard (简单的思维题目)
- 【杭电-oj】-2008-数值统计
- 关于苹果iOS设备日期设置到1970年变砖的原理及解救方法
- Expandable的条目存在抢点击事件的控件