uva10562 dfs+输入

11 篇文章 0 订阅

这题思路上解决不难,关键是输入上,直接用cin 是不可以的,因为cin遇到空格就停止。用cin.getline()就可以解决了。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=500;
int T,cur,row;
char g[maxn][maxn];
bool judge_char(char c){
	if(c!='|'&&c!=' '&&c!='-') return true;
	return false;
}

void dfs(int cur,int row){
	putchar(g[cur][row]),putchar('(');
	if(g[cur+1][row]=='|'){///有子树 
	int left_row;
		for(left_row=row;g[cur+2][left_row-1]=='-';left_row--);///确定左边界
		for(;g[cur+2][left_row]=='-';left_row++)
		if(judge_char(g[cur+3][left_row])&&g[cur+3][left_row]!='\0') dfs(cur+3,left_row);
	}
	putchar(')');
}

int main(){
	while(cin>>T){
		cin.get();///吸收掉缓冲区中的回车 
		for(int cas=1;cas<=T;cas++){
			memset(g,0,sizeof(g));
			cur=0;
			for(;;){
			cin.getline(g[cur]+1,maxn);
			if(g[cur][1]=='#') break;
			cur++;				
			}
			g[cur][1]='\0';
			putchar('(');
			for(row=1;row<=strlen(g[0]+1);row++)
			if(judge_char(g[0][row])){
			dfs(0,row);break;				
			}
			printf(")\n"); 
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值