uva10562看图写树
递归处理即可,
链接:https://www.luogu.com.cn/problem/UVA10562
注意fgets和sscanf的用法,(fgets从指定的流中读取数据,每次读一行)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=210;
int n;
char buf[maxn][maxn];
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--;
//cout<<i<<endl;
while(buf[r+2][i]=='-'&&buf[r+3][i]!='\0')//判断是否为'\0' ,不断递归即可
{
if(!isspace(buf[r+3][i]))
dfs(r+3,i);
i++;
}
//cout<<r<<" "<<i<<endl;
}
printf(")");
}
void solve()
{
n=0;
for(;;)
{
fgets(buf[n],maxn,stdin);
if(buf[n][0]=='#') break;
else n++;
}
cout<<n<<endl;
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;
}
/*
2
A
|
--------
B C D
| |
----- -
E F G
#
*/