//目录

Uva 10562 看图写树

题目链接:https://uva.onlinejudge.org/external/105/10562.pdf

紫书P170

直接在二维数组上做DFS,用的fgets函数读入数据,比较gets函数安全,但是会读入 \n,在 DFS 的时候,下一个状态要 不等于空格,并且不等于 \n;

#include <bits/stdc++.h>
using namespace std;

const int Maxn = 200+10;
char buf[Maxn][Maxn];

int n;

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]))     fgets会读入换行
            if(buf[r+3][i]!=' '&&buf[r+3][i]!='\n')
                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;
    fgets(buf[0],Maxn,stdin);
    sscanf(buf[0],"%d",&t);
    while(t--)
    {
        solve();
    }
    return 0;
}
View Code

 

posted @ 2016-11-14 20:32  小草的大树梦  阅读(236)  评论(0编辑  收藏  举报