Uva 10562 看图写树
题目链接:https://uva.onlinejudge.org/external/105/10562.pdf
紫书P170
直接在二维数组上做DFS,用的fgets函数读入数据,比较gets函数安全,但是会读入 \n,在 DFS 的时候,下一个状态要 不等于空格,并且不等于 \n;
#include <bits/stdc++.h> using namespace std; const int Maxn = 200+10; char buf[Maxn][Maxn]; int n; void dfs(int r,int c) { printf("%c(",buf[r][c]); if(r+1<n&&buf[r+1][c]=='|') { int i = c; while(i-1>=0&&buf[r+2][i-1]=='-') i--; while(buf[r+2][i]=='-'&&buf[r+3][i]!='\0') { //if(!isspace(buf[r+3][i])) fgets会读入换行 if(buf[r+3][i]!=' '&&buf[r+3][i]!='\n') dfs(r+3,i); i++; } } printf(")"); } void solve() { n = 0; for(;;) { fgets(buf[n],Maxn,stdin); if(buf[n][0]=='#') break; else n++; } printf("("); if(n) { for(int i=0; i<strlen(buf[0]); i++) { if(buf[0][i]!=' ') { dfs(0,i); break; } } } printf(")\n"); } int main() { int t; fgets(buf[0],Maxn,stdin); sscanf(buf[0],"%d",&t); while(t--) { solve(); } return 0; }