有点dfs的感觉,树是连通的,可以从根节点一直追踪到叶子。有些比如空树的特殊情况要小心。
#include<stdio.h> #include<string.h> #include<ctype.h> #define MAX 210 char tree[MAX][MAX]; int idx; void drawTree(int i, int j) { if (tree[i + 1][j] == '|') { printf("%c", tree[i][j]); tree[i][j] = '-'; int s, t; for (s = j; tree[i + 2][s] == '-'; s--) ; for (t = j; tree[i + 2][t] == '-'; t++) ; s++; t--; printf("("); int p; for (p = s; p <= t; p++) { if (isprint(tree[i + 3][p]) && tree[i + 3][p] != '-' && tree[i + 3][p] != '|' && tree[i + 3][p] != ' ' && tree[i + 3][p] != '#') drawTree(i + 3, p); } printf(")"); } else { printf("%c()", tree[i][j]); tree[i][j] = '-'; } return; } int main() { int cases; scanf("%d", &cases); while (cases--) { memset(tree, 0, sizeof(tree)); idx = 0; while (gets(tree[idx]) != NULL ) { if (tree[idx][0] == '#') break; else idx++; } int i, j; int blank = 1; for (i = 0; i < MAX; i++) { for (j = 0; j < MAX; j++) { if (isprint(tree[i][j]) && tree[i][j] != '-' && tree[i][j] != '|' && tree[i][j] != ' ' && tree[i][j] != '#') { blank = 0; printf("("); drawTree(i, j); printf(")\n"); } } } if(blank) printf("()\n"); } return 0; }
相关推荐
判断输入字符串是否为镜像或回文串。 来源于UVaOJ - 401. 水题。
开源项目-codingsince1985-UVa#uva-online-judge-solutions-in-golang.zip,两年来每天都在解决一个uva在线裁判问题,算起来…
uva705 Slash Maze 的代码,在UVaOJ上通过
PDF试题
uva532 Dungeon Master的源代码,并且AC了
Algorithm-UVA-Solutions-in-Python.zip,python 3中各种uva(acm)问题的解决方案。,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
这是UVA133 TheDoleQueue救济金发放问题,经典的算法问题。初学算法的人要对这种算法非常熟悉并且能熟练运用。
tpcw-nyu-uva-client 客户端
leetcode 2 算法-Java UVa Online Judge(ACM-ICPC Live ...使用:数组、哈希表、链表、二分搜索、动态规划、堆栈、堆、reedy、排序、树 DFS、BFS、图、二分搜索树、递归、记忆、队列、映射等。...Uva-ACM-ICPC