6-17 看图写树 uva10562

非常好的dfs题  有很多细节

关于‘ ’  ‘0’  ’ ‘  的处理  他们都属于isspace函数

其中

while(buf[x+2][i]=='-'&&buf[x+3][i]!='')  很重要    &&后面去掉的话会自动以为目标进行dfs  得到答案不止一行!!!

判断不是空格用!isspace()

fgets用于读取行 在string不合适的时候  并且同样会读取换行符

if(n){ for(int i=0;i<strlen(buf[0]);i++)
{
if(buf[0][i]!=' '){dfs(0,i);break;}
}

}    //如果去掉if(n)    会错    debug了好久!!!

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

char buf[1000][1000];

int n;

void dfs(int x,int y)
{
    printf("%c(",buf[x][y]);
    if(buf[x+1][y]=='|')
    {
        int i=y;
        while((i-1)>=0&&buf[x+2][i-1]=='-')i--;

        while(buf[x+2][i]=='-'&&buf[x+3][i]!='')//11111
        {
            if(!isspace(buf[x+3][i]))dfs(x+3,i);
            i++;
        }


    }
    printf(")");

}


int main()
{
  
     int cas;cin>>cas;getchar();
    while(cas--)
    {
         memset(buf,' ',sizeof(buf));
    
        int i=0; n=0;

        for(;;){
            fgets(buf[n],210,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(")
");
   }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/bxd123/p/10312098.html