【例题 6-17 UVa 10562】Undraw the Trees

【链接】 我是链接,点我呀:)
【题意】

在这里输入题意

【题解】

模拟+递归

【代码】

#include <bits/stdc++.h>
using namespace std;

const int N = 200;

string s[N+10];
int n;

bool is(char key){
	if (key!='-' && key != '|' && key != ' ' && key != '#') return true;
	return false;
}

void dfs(int x,int y){
//	cout << x <<' '<<y<<endl;
//	if (s[x][y]==' ') cout <<"???";
 	cout <<s[x][y];cout << "(";
 	if (x+1 < n && s[x+1][y]=='|'){
		int l = y,r = y;
		if (x+2 < n){
    		while (l-1 >= 0 && s[x+2][l-1]=='-') l--;
    		while (r+1 <(int) s[x+2].size() && s[x+2][r+1]=='-') r++;
    		if (x+3 < n){
        		for (int i = l;i <= r;i++){
        			if (i<(int)s[x+3].size() && is(s[x+3][i])) {
        				dfs(x+3,i);
        			}
        		}

    		}
		}
 	}
 	cout << ")";
}

int main(){
	#ifdef LOCAL_DEFINE
	    freopen("F:\\c++source\\rush_in.txt", "r", stdin);
	#endif
	ios::sync_with_stdio(0),cin.tie(0);
	int T;
	cin >> T;
	cin.get();
	while (T--){
	  	n = 0;
		while (getline(cin,s[n])){
		 	if (s[n][0]=='#') break;
//		 	cout << s[n];
//		 	cout <<"size="<<' '<<s[n].size()<<endl;
		 	n++;
		}
		cout << "(";
		if (n>=1){
		 	for (int i = 0;i < (int) s[0].size();i++)
		 		if (is(s[0][i]))
		 			dfs(0,i);
		}
		cout << ")"<<endl;
	}

	return 0;
}
posted @ 2017-11-17 09:57  AWCXV  阅读(182)  评论(0编辑  收藏  举报