传送门UVa 10562 - Undraw the Trees
题意是根据给的"树", 按格式输出.
没思路, 参考了GooMaple的解题报告.
思路是建一个二维数组, 根据" - " 和 节点值 和"|" 的对应关系进行输出.
注意空的树的情况.
详情见代码
#include <cstdio>
#include <cstring>
using namespace std;
int cnt;
char in[220][220];
void DFS(int x, int y);
int main()
{
//freopen("input.txt", "r", stdin);
int i, T;
scanf("%d", &T);
getchar();
while (T--)
{
cnt = 1;
memset(in, 0, sizeof(in));
while (strcmp(in[cnt - 1], "#") != 0)
gets(in[cnt++]);
if (cnt == 2)
{
printf("()\n");
continue;
}
for (i = 0; i < strlen(in[1]); i++)
in[0][i] = '-';
printf("(");
DFS(0, 0);
printf(")\n");
}
return 0;
}
void DFS(int x, int y)
{
int i, j;
for (i = y; in[x][i] == '-'; i++)
if (in[x + 1][i] != ' ' && in[x + 1][i] != 0)
{
printf("%c(", in[x + 1][i]);
if (in[x + 2][i] == '|')
{
for (j = i; j > 0 && in[x + 3][j - 1] == '-'; j--); //找到最左端的' - '
DFS(x + 3, j);
}
printf(")");
}
}