用DFS深度搜索树。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 200+10;
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--;
while(buf[r+2][i]=='-'&&buf[r+3][i]!='\0') {
if(!isspace(buf[r+3][i])) 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;
scanf("%d",&T);
char c=getchar();
while(T--) solve();
return 0;
}
本文介绍了一种使用深度优先搜索(DFS)解析特殊格式输入的方法。通过递归地访问节点并打印路径,此C++程序能够解析类似树状结构的数据,并以括号表示法展示其结构。特别适用于处理树形或分层数据。
1628

被折叠的 条评论
为什么被折叠?



