题解:题意很好理解,具体做法是深搜,将行序号,还有根据子节点的范围确定的 '-' 的初始和末尾的范围当做递归参数,直到子节点下面没有 '|' 为止。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
using namespace std;
const int N = 200 + 5;
string str[N], ans;
int n;
void init() {
ans = "";
n = 0;
for (int i = 0; i < N; i++)
str[i] = "";
}
void dfs(int i, int st, int en) {
ans += '(';
for(int j = st; j <= en && j < str[i].size(); j++ )
if(str[i][j] != ' ' && str[i][j] != '#' && str[i][j] != '|' && str[i][j] != '-') {
ans += str[i][j];
if(str[i + 1][j] == '|') {
int temp1 = -1;
int temp2 = str[i + 2].size() - 1;
for(int k = j; k >= 0; k--)
if (str[i + 2][k] != '-') {
temp1 = k;
break;
}
for(int k = j; k < str[i + 2].size(); k++)
if (str[i + 2][k] != '-') {
temp2 = k;
break;
}
if(temp1 == -1)
temp1 = 0;
dfs(i + 3, temp1, temp2);
}
else
ans += "()";
}
ans += ')';
return;
}