分析:还是一个DFS的题目,但是这个题的递归条件看起来有点难写,但是只要仔细一想还是可以写出来的。(具体见
下面的代码)
#include<cstdio>
#include<cctype>
#include<cstring>
using namespace std;
#include<cctype>
#include<cstring>
using namespace std;
const int maxn = 210;
int n;
char a[maxn][maxn];
void dfs(int r, int c)
{
printf("%c(", a[r][c]);
if(r+1 < n && a[r+1][c] == '|')
{
int i = c;
while(i-1 >= 0 && a[r+2][i-1] == '-') i--;//寻找-的的左边界
while(a[r+2][i] == '-' && a[r+3][i] != '\0')
{
if(!isspace(a[r+3][i])) dfs(r+3, i);//递归遍历此节点
i++;
}
}
printf(")");
}
int n;
char a[maxn][maxn];
void dfs(int r, int c)
{
printf("%c(", a[r][c]);
if(r+1 < n && a[r+1][c] == '|')
{
int i = c;
while(i-1 >= 0 && a[r+2][i-1] == '-') i--;//寻找-的的左边界
while(a[r+2][i] == '-' && a[r+3][i] != '\0')
{
if(!isspace(a[r+3][i])) dfs(r+3, i);//递归遍历此节点
i++;
}
}
printf(")");
}
void solve()
{
n = 0;
for(;;)
{
fgets(a[n], maxn, stdin);
if(a[n][0] == '#') break;
else n++;
}
printf("(");
if(n)
{
for(int i = 0; i < strlen(a[0]); i++)
if(a[0][i] != ' ') { dfs(0, i); break; }
}
printf(")\n");
}
{
n = 0;
for(;;)
{
fgets(a[n], maxn, stdin);
if(a[n][0] == '#') break;
else n++;
}
printf("(");
if(n)
{
for(int i = 0; i < strlen(a[0]); i++)
if(a[0][i] != ' ') { dfs(0, i); break; }
}
printf(")\n");
}