zoukankan      html  css  js  c++  java
  • UVA

    /*
      直接在二维字符数组中递归,无须建树
      注意对空树的处理,以及,结点标号可以是任意可打印字符
      
      其他链接:
      1. http://www.cnblogs.com/Bob-tong/p/6610647.html
      isspace()函数的功能为:判断输入字符是否为空格/回车/制表符等 (而不仅仅只是判断空格)
      
      2. http://blog.csdn.net/daiyutage/article/details/8540932
      fgets()函数的有关介绍,一般 fgets()会比用 gets()安全,所以很有必要仔细研究下 fgets()的用法
      
      3. http://www.cnblogs.com/kex1n/archive/2011/06/09/2076501.html
      sscanf()函数,利用它可以从字符串中取出整数、浮点数和字符串等等
      
    */


    #include <cstdio>
    #include <cctype>
    #include <cstring>
    using namespace std;
    const int N = 200 + 10;
    
    int n;
    char buf[N][N];
    
    // 递归遍历并且输出以字符 buf[r][c] 为根的树
    void dfs(int r, int c)
    {
    	printf("%c(", buf[r][c]);
    	
    	if ( r + 1 < n && buf[r + 1][c] == '|' ) //有子树
    	{
    		int i = c;
    		while ( i - 1 >= 0 && buf[r + 2][i - 1] == '-' ) i--; //找“----”的左边界
    		while ( buf[r + 2][i] == '-' && buf[r + 3][i] != '' )
    		{
    			if ( !isspace (buf[r + 3][i]) ) dfs(r + 3, i); // fgets 读入的 '
    ' 也满足 isspace()
    			i++; 
    		} 
    	}
    	printf(")");
    } 
    
    void solve()
    {
    	n = 0;
    	while (true)
    	{
    		fgets(buf[n], N, 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(")
    ");
    }
    
    int main()
    {
    	int t;
    //	fgets(buf[0], N, stdin);
    //	sscanf(buf[0], "%d", &t);
    	scanf("%d", &t);
    	getchar();
    	while (t--)
    	solve();
    	return 0;
    }


  • 相关阅读:
    命令行工具--netstat
    Man手册--nmap
    bc -l 对于 %取模计算出错
    离散对数和原根 欧拉定理证明
    bc-win32-power-echo-vim-not-work
    2010版EXCEL下方sheet工作表隐藏了
    word多出空标题,样式是列出段落
    plantuml
    久石让《龙猫》豆豆龙 钢琴视奏版
    神奇校车 = topsage
  • 原文地址:https://www.cnblogs.com/mofushaohua/p/7789392.html
Copyright © 2011-2022 走看看