這道題初看輸入有點煩,仔細一看就開個二位元組,直接遍曆數組求解就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後,很想看大牛代碼的,還是忍住啦!