UVA10562- Undraw the Trees

题意:依照左边的树的图形,输出右边的序列

思路:刚开始看到那个图就蒙了。。。不懂怎么做,后来看到别人的想法,就试着用图的遍历,然后利用DFS,递归将序列输出,不过要注意当为空的时候,应该输出“()”

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 250

char str[N][N];
int cnt;

void dfs(int x, int y) {	
	for(int i = y; str[x][i] == '-'; i++) {
		if(str[x + 1][i] != ' ' && str[x + 1][i] != '\0') {
			printf("%c(", str[x + 1][i]);
			if(x + 1 < cnt && str[x + 2][i] == '|') {
				int j = i;
				while (str[x + 3][j - 1] == '-') {
					j--;		
				}//找到'-'的初始位置
				dfs(x + 3, j);	
			}
			printf(")");
		}
	}
}

int main()
{
	int cas;
	scanf("%d",&cas);
	getchar();
	while (cas--) {
		cnt = 1;
		memset(str, 0, sizeof(str));
		while (gets(str[cnt]) != NULL) {
			if(!strcmp(str[cnt], "#"))
				break;
			cnt++;
		}	
		if(cnt == 1) // 树为空时,需要特殊处理
			puts("()");
		else
		{
			int len = strlen(str[1]);
			for(int i = 0; i < len; i ++)
				str[0][i] = '-';
			printf("(");
			dfs(0, 0);
			printf(")\n");
		}
	}
	return 0;
}


你可能感兴趣的:(UVA10562- Undraw the Trees)