您的位置:首页 > 其它

uva10562 Undraw the Trees

2016-06-10 15:23 344 查看
题意:按照图给的树的形状用括号输出这棵树。

思路:按照树前序遍历递归打印,注意一些字符处理的细节,比如说fgets()代替gets()

#include<bits/stdc++.h>
using namespace std;
const int maxn=250;
int n;
char str[maxn][maxn];
void dfs(int r,int c)
{
printf("%c(",str[r][c]);
if(r+1<n&&str[r+1][c]=='|'){
int i=c;
while(str[r+2][i-1]=='-'&&i-1>=0) i--;
while(str[r+2][i]=='-'&&str[r+3][i+1]!='\0'){//这里有一个坑,每一行最后'\n'在'\0'前面。对于'\n'当然也是不用打印,所以我这里是str[r+3][i+1]!='\0'
if(str[r+3][i]!=' ') dfs(r+3,i);
i++;
}
}
printf(")");
}

void solve()
{
n=0;
for(;;){
fgets(str
,maxn,stdin);//gets
if(str
[0]=='#') break;
else n++;
}
printf("(");
if(n){
for(int i=0;i<strlen(str[0]);i++){
if(str[0][i]!=' ') {dfs(0,i);break;}
}
}
printf(")\n");
}

int main()
{
int T;
fgets(str[0],maxn,stdin);//这虐坑,我直接scannf()读取T,一直W,看了书上这种写法。以后注意就好。
sscanf(str[0], "%d",&T);
while(T--) solve();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: