您的位置:首页 > 其它

UVA, 112Tree Summing

2016-05-07 17:43 169 查看
题意:一棵树从上到下相加,问是否出现该值



出现的值为5+4+11+7=27,5+4+11+2=22,5+8+13=26,5+8+4+1=18

dfs算法,用一个数组每次递归记录下当前的值,读到根,把数组的值相加。

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 1000
int n;
int sum;
char input();
void solve(int a,int *b);
int first;
int main()
{
while(cin>>n)
{
char ch=input();
sum=0;
first=1;
solve(0,0);

if(sum)
cout<<"yes\n";
else
cout<<"no\n";
}
return 0;
}
char input()
{
char  ch;
do{
scanf("%c",&ch);
}while(ch==' '||ch=='\n');
return ch;
}
void solve(int a,int *b)
{
int v;
scanf("%d",&v);
char ch=input();
if(first)
{
first=0;
if(ch==')')
return;
}
// cout<<v<<ch<<endl;
int l=0,r=0;
if(ch=='(')
{
a=a+v;
solve(a,&l);
ch=input();
solve(a,&r);
ch=input();
if(l&&r&&n==a){
sum=1;
//  cout<<a<<endl;
}
// cout<<a<<endl;

}
else
*b=1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: