uva 10562

来源:互联网 发布:开农村淘宝服务站 编辑:程序博客网 时间:2024/06/07 04:52
题意:看图模拟
#include <cstdio>  #include <cstring>using namespace std;const int MAXN = 210 ; char 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              {                  dfs(x+3,j);              }          }      }      printf(")");      return ;  }int main()  {      int t;      scanf("%d",&t);      getchar();      while (t--)      {          n=0;           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;  }

原创粉丝点击