当前位置: 代码迷 >> 综合 >> uva 10562 Undraw the Trees
  详细解决方案

uva 10562 Undraw the Trees

热度:90   发布时间:2023-12-06 08:46:18.0

题目:Undraw the Trees


题意:给一棵看起来是树的树,要求用括号的表示方法表示。


思路:dfs求解。


注意:

1、uva不能用gets。

2、可能会有一颗空数的情况。


代码:

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<vector>
using namespace std;char tree[205][205];
int n=0;bool istrue(char x){if(x=='\0'||x=='\n'||x=='\r'||x==' '||x=='#'||x=='-'||x=='|')return false;return true;
}void dfs(int row,int col){printf("%c(",tree[row][col]);if(tree[row+1][col]=='|'){int l=0,r=199;for(int i=col-1;i>=0;i--){if(tree[row+2][i]==' '||tree[row+2][i]=='\n'||tree[row+2][i]=='\r'){l=i+1;break;}}for(int i=col+1;i<200;i++){if(tree[row+2][i]==' '||tree[row+2][i]=='\n'||tree[row+2][i]=='\r'){r=i-1;break;}}for(int i=l;i<=r;i++){if(istrue(tree[row+3][i])) dfs(row+3,i);}}printf(")");
}int main() {int T;scanf("%d",&T);getchar();while(T--){memset(tree,' ',sizeof(tree));n=-1;while(fgets(tree[++n],201,stdin)&&tree[n][0]!='#');n--;if(n==-1){printf("()\n");continue;}printf("(");for(int i=0;i<200;i++){if(istrue(tree[0][i])){dfs(0,i);break;}}printf(")\n");}return 0;
}