stack+DFS ZOJ 1004 Anagrams by Stack
2015-04-20 20:45
393 查看
题目传送门
/* stack 容器的应用: 要求字典序升序输出,所以先搜索入栈的 然后逐个判断是否满足答案,若不满足,回溯继续搜索,输出所有符合的结果 */ #include <cstdio> #include <iostream> #include <algorithm> #include <stack> #include <cmath> #include <cstring> #include <vector> using namespace std; const int MAXN = 1e4 + 10; const int INF = 0x3f3f3f3f; string s1, s2; int len; stack<char> S; vector<char> V; void DFS(int push, int pop) { if (push == len && pop == len) { for (int i=0; i<V.size (); ++i) cout << V[i] << " "; cout << endl; } if (push + 1 <= len) //入栈 { S.push (s1[push]); V.push_back ('i'); DFS (push+1, pop); S.pop (); V.pop_back (); } if (pop + 1 <= push && pop + 1 <= len && S.top () == s2[pop]) //出栈 { char ch = S.top (); S.pop (); V.push_back ('o'); DFS (push, pop+1); S.push (ch); V.pop_back (); } } int main(void) //ZOJ 1004 Anagrams by Stack { //freopen ("ZOJ_1004.in", "r", stdin); while (cin >> s1 >> s2) { V.clear (); while (!S.empty ()) S.pop (); len = s1.length (); cout << "[" << endl; DFS (0, 0); cout << "]" << endl; } return 0; } /* [ i i i i o o o i o o i i i i o o o o i o i i o i o i o i o o i i o i o i o o i o ] [ i o i i i o o i i o o o i o i i i o o o i o i o i o i o i o i i i o o o i o i o i o i o i o i o ] [ ] [ i i o i o i o o ] */
相关文章推荐
- ZOJ(1004)Anagrams by Stack (DFS+stack)
- ZOJ 1004 Anagrams by Stack(dfs堆栈)
- ZOJ 1004 Anagrams by Stack(dfs堆栈)
- ZOJ 1004 Anagrams by Stack(dfs堆栈)
- ZOJ 1004 Anagrams by Stack (DFS 注意栈!)
- ZOJ--1004:Anagrams by Stack(dfs)
- zoj 1004 Anagrams by Stack (dfs+stack)
- zoj 1004 , hrbust 1317 Anagrams by Stack【 dfs 】
- zoj1004-Anagrams by Stack 【栈 dfs】
- ZOJ 1004 Anagrams by Stack(DFS+数据结构)
- zoj 1004 Anagrams by Stack
- ZOJ 1004 Anagrams by Stack
- ZOJ Problem Set - 1004-Anagrams by Stack
- ZOJ 1004 Anagrams by Stack
- 浙大ZOJ 1004 Anagrams by Stack问题解决
- zoj 1004 Anagrams by Stack
- ZOJ 1004 Anagrams by Stack
- ZOJ-1004(AOJ-466) Anagrams by Stack
- ZOJ Problem Set - 1004 Anagrams by Stack
- hdu 1515,zoj 1004 Anagrams by Stack