• [dfs]Undraw the Trees 看图写树



    Undraw the Trees

    Description

    将多叉树转化为括号表示法。每个结点用除了‘-’, ‘|’, ‘ ’(空格), ‘#’ 的其他字符表示,每个非叶结点的正下方会有一个 ‘|’ 字符,然后下面是一排 ‘-’ 字符,恰好覆盖所有子节点的上方。单独的一行 ‘#’ 为数据结束。

    Examples

    Input

    2
       A
       |
    --------
    B C   D
        |   |
     ----- -
     E  F G
    #
    e
    |
    ----
    f g
    #

    Output

    (A(B()C(E()F())D(G())))
    (e(f()g())) 

    正确解法:

    dfs吧

    求出有几行,然后找到第一个字母,输出 ”(字母 ” 往下递推 最后输出 “ )”

    递推:字母下一行一定是 | 再往下是 ----  再下面是字母 ,找到字母 然后依次递推。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<string>
     4 #include<cstring>
     5 #include<map>
     6 #include<set>
     7 #include<vector>
     8 #include<queue>
     9 #include<algorithm>
    10 #include<cmath>
    11 using namespace std;
    12 typedef long long ll;
    13 const int N = 300;
    14 int T,n;
    15 char tree[N][N];
    16 void dfs(int r,int c)
    17 {
    18     printf("%c(",tree[r][c]);
    19     int aa=c,bb=c;
    20     if(r+1<n&&tree[r+1][c]=='|')
    21     {
    22         while(r+2<n&&aa-1>=0&&tree[r+2][aa-1]=='-') aa--;
    23         while(r+2<n&&tree[r+2][bb+1]=='-') bb++;
    24         for(int i=aa;i<=bb;i++)
    25             if(tree[r+3][i]!=' '&&tree[r+3][i]!='')
    26                 dfs(r+3,i);
    27     }
    28     printf(")");
    29 }
    30 int main()
    31 {
    32     scanf("%d",&T);
    33     getchar();
    34     while(T--)
    35     {
    36         n=0;
    37         while(true)
    38         {
    39         gets(tree[n]);
    40         if(tree[n][0]=='#') break;
    41         n++;
    42         }
    43         printf("(");
    44         if(n)
    45         {
    46             for(int i=0;i<strlen(tree[0]);i++)
    47                 if(tree[0][i]!=' ')
    48                 {
    49                 //printf("%c
    ",tree[0][i]);
    50                 dfs(0,i);
    51                 break;
    52                 }
    53         }
    54         printf(")
    ");
    55     }
    56     return 0;
    57 }
    View Code
    No matter how you feel, get up , dress up , show up ,and never give up.
  • 相关阅读:
    图像处理基础2
    c++之morphologyEx(形态学操作)
    图像处理基础
    Mac 安装QT
    Qmake VS Cmake
    g++,qmake,cmake区别
    C++11中的匿名函数(lambda函数,lambda表达式)
    c++相关要点
    spritekit基础节点学习
    spriteKit简单学习
  • 原文地址:https://www.cnblogs.com/Kaike/p/10446794.html
Copyright © 2020-2023  润新知