Undraw the Trees UVA 10562(递归写树)
2018-02-05 16:24
183 查看
这道题不难,直接做就好了,但是对边界的要求还是比较严格的,需要处理的细节比较多
#include <bits/stdc++.h> #define ll long long #define pb push_back #define inf 0x3f3f3f3f #define rep(i,a,b) for(int i=a;i<b;i++) #define rep1(i,a,b) for(int i=a;i>=b;i--) #define rson rt<<1|1,m+1,r #define lson rt<<1,l,m using namespace std; const int N=1e5+10; int arr ,cnt; bool islable( char c ) { if( c == ' ' || c == '|' || c == '#' || c == '-' || c == '/n' ) return false ; return true ; } void dfs(string str[],int l,int r,int c) { if(c>=cnt)return ; for(int i=l;i<=r&&i<str[c].size();i++) { if(islable(str[c][i])) { cout<<str[c][i]; cout<<'('; if(c<cnt-2&&str[c+1][i]=='|') { int j=i; while(j>0&&str[c+2][j]=='-') j--; int l1=j; j=i; while(j<str[c+2].size()+1&&str[c+2][j]=='-') j++; int r1=j; dfs(str,l1,r1,c+3); } cout<<')'; } } } int main() { int t; cin>>t; getchar(); while(t--) { string str[210]; cnt=0; while(getline(cin,str[cnt++])) { if(str[cnt-1][0]=='#')break; } cout<<'('; dfs(str,0,str[0].size()-1,0); cout<<')'<<endl; } return 0; }
相关文章推荐
- 递归实例总结
- hihoCoder #1014 : Trie树 使用递归建树的方法
- 程序员面试之循环与递归(四)
- 递归:: 八皇后问题
- 数据结构二叉树的建立以及递归遍历
- PHP中递归和递推的探讨
- 递归查找文件
- 二叉树3种递归和非递归遍历(Java)
- PHP递归创建目录函数
- 二叉树后序遍历(递归)
- 递归和迭代
- 从汇编的角度看递归
- 递归
- Jsp+Ext2.0用递归实现任意指定节点ID的无限级Tree的生成
- 第十三周上机任务项目1-Fibnacci序列(递归)
- 算法中的递归分析和分治法的原理
- 【算法导论】02——渐近符号、递归及解法
- 九度OJ 1035:找出直系亲属 (二叉树、递归)
- 递归之美 - Loki库TypeList源码剖析
- 非递归遍历二叉树(前序、后序、中序)