UVA - 10562 Undraw the Trees(看图写树 不用建树)
2016-09-23 22:29
141 查看
题目链接:http://vjudge.net/problem/UVA-10562
题意:将一棵多叉树转化成题目所要求的括号表示法。
分析:不用建树,将整棵树放在二维数组里一点点读取节点即可。题目不难,就是不太好解释。
题意:将一棵多叉树转化成题目所要求的括号表示法。
分析:不用建树,将整棵树放在二维数组里一点点读取节点即可。题目不难,就是不太好解释。
#include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<iostream> #include<algorithm> #include<set> #include<map> #include<vector> #include<list> #include<deque> #include<queue> #include<cmath> using namespace std; const int maxn = 210; char s[maxn][maxn]; char ans[10000]; int cur,d; void dfs(int deep, int left, int right) { if (deep > d) return; for(int i = left; i <= right; i++) { if((i<strlen(s[deep])) && s[deep][i] != '|' && s[deep][i] != '-' && s[deep][i] != ' ' && s[deep][i] != '#') { ans[cur++] = s[deep][i]; ans[cur++] = '('; if(s[deep + 1][i] == '|') { int l = i, r = i; while(s[deep + 2][l] == '-') l--; while(s[deep + 2][r] == '-') r++; dfs(deep + 3, l + 1, r - 1); ans[cur++] = ')'; } else ans[cur++] = ')'; //cout << "**" << s[deep][i] << " ** " << i << endl; } } return; } int main() { int t; scanf("%d",&t); getchar(); while(t--) { d = 0; while(gets(s[d]))//读取树存放在二维数组里 { if(s[d][0] == '#') break; d++; } cur = 0; ans[cur++] = '('; dfs(0, 0, strlen(s[0]) - 1); ans[cur++] = ')'; ans[cur] = 0; printf("%s\n",ans); } return 0; } /* 2 A | -------- B C D | | ----- - E F G # e | ---- f g # */
相关文章推荐
- UVA - 10562 Undraw the Trees(看图建树)
- uva 11234 Expressions 表达式 建树+BFS层次遍历
- UVA 699(二叉树建树与遍历)
- 紫书章六例题八 UVA 548 (中序后序建树,前序遍历求值)
- uva 11234 Expressions 表达式 建树+BFS层次遍历
- 九度OJ 1172 哈夫曼树(不用建树)
- 紫书章六例题八 UVA 548 (中序后序建树,前序遍历求值)
- uva 439 前序,中序遍历 转化成后序遍历 不用指针!用数组
- 指针建树uva548
- UVA-10562看图写树
- 九度OJ 1172 哈夫曼树(不用建树)
- 紫书章六例题八 UVA 548 (中序后序建树,前序遍历求值)
- Uva806 Spatial Structures 【递归建树】【习题6-8】
- UVA 11234 建树以及栈和队列的运用
- UVA 297 Quadtrees(四叉树建树、合并与遍历)
- 紫书章六例题八 UVA 548 (中序后序建树,前序遍历求值)
- Uva10562 Undraw the Trees 【递归建树】【例题6-17】
- 不用建树的方法
- 紫书章六例题八 UVA 548 (中序后序建树,前序遍历求值)
- 紫书章六例题10 下落的树叶 UVA 699 (根据前序遍历建树)