UVa 10562 – Undraw the Trees//遍曆or遞迴

來源:互聯網
上載者:User

  這道題初看輸入有點煩,仔細一看就開個二位元組,直接遍曆數組求解就ok了。但是輸出還有括弧,在這裡跪了幾次。然後值得注意的是,節點不一定是字母,頁可以使其他的字元。最後注意邊界就ok啦!下面是代碼:

#include<stdio.h>#include<string.h>#define MAXN 210char map[MAXN][MAXN];int n;void dfs(int x,int y){    printf("%c(",map[x][y]);    if(x==n-1)// out of the recursion,so it is a leaf    {        printf(")");        return;    }    if(map[x+1][y]=='|')// it has childs    {        int i;        for(i=y;map[x+2][i]=='-';i--);// find his leftest child        i=i+1;        for(int j=i;map[x+2][j]=='-'&&j<strlen(map[x+3]);j++)        {            if(map[x+3][j]!=' '&&map[x+3][j]!='\0')// '\0' may be conuted            {               //printf("(");               dfs(x+3,j);            }        }    }    printf(")");    return ;}int main(){    int t;    scanf("%d",&t);    getchar();    while(t--)    {        n=0;        //memset(map,'\0',sizeof(map));        while(gets(map[n])&&map[n][0]!='#')  n++;        int len=strlen(map[0]);        int flag=0;        for(int i=0;i<n;i++)        {            for(int j=0;j<len;j++)               if(map[i][j]!=' '){                printf("(");                dfs(i,j);                printf(")\n");                flag=1;                break;                }            if(flag) break;        }        if(!flag) printf("()\n");    }    return 0;}

ps:在n次wa後,很想看大牛代碼的,還是忍住啦!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.