题意:看图模拟
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 210 ;
char map[MAXN][MAXN];
int n;
void dfs(int x,int y)
{
printf("%c(",map[x][y]); //开始找子节点
if (x==n-1)// out of the recursion,so it is a leaf
{
printf(")");
return;
}
if (map[x+1][y]=='|')// it has childs
{
int i;
for ( i=y ; map[x+2][i]=='-' ; i--);// find his leftest child
i=i+1;
for (int j=i;map[x+2][j]=='-'&&j<strlen(map[x+3]);j++)
{
if (map[x+3][j]!=' '&&map[x+3][j]!='\0')// '\0' may be conuted
{
dfs(x+3,j);
}
}
}
printf(")");
return ;
}
int main()
{
int t;
scanf("%d",&t);
getchar();
while (t--)
{
n=0;
while (gets(map[n]) && map[n][0]!='#' ) n++;
int len=strlen(map[0]);
int flag=0;
for (int i=0;i<n;i++)
{
for (int j=0;j<len;j++)
if (map[i][j]!=' ')
{
printf("(");
dfs(i,j);
printf(")\n");
flag=1;
break;
}
if (flag)
break;
}
if (!flag) printf("()\n");
}
return 0;
}