1. 程式人生 > >6-17 看圖寫樹 uva10562

6-17 看圖寫樹 uva10562

mem gif ssp ide display getchar() pen -- code

非常好的dfs題 有很多細節

關於‘ ’ ‘0’ ’\n‘ 的處理 他們都屬於isspace函數

其中

while(buf[x+2][i]==‘-‘&&buf[x+3][i]!=‘\0‘) 很重要 &&後面去掉的話會自動以\0為目標進行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]!=\0)//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(")\n"); } return 0; }
View Code

6-17 看圖寫樹 uva10562