UVa 839 Not so Mobile

题意:给出一个树状天平,判断其是否平衡

学习的紫书:采用递归先序输入,每个天平的格式为w1,d1,w2,d2,当w1,w2为0的时候,输入的是一个子天平。

这样每当输入一个子天平的时候,返回子天平是否平衡,同时用的是&w值传递,每次调用solve函数,w的值也会改变,就一层一层子天平的判断

递归理解起来还是很吃力,然后手推了一下样例,然后又打印中间的值来看,稍微理解一丢丢了= =

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath>   
 5 #include<algorithm>  
 6 using namespace std;
 7 
 8 typedef long long LL;
 9 
10 bool solve(int &w){
11     int w1,w2,d1,d2;
12     bool b1=true,b2=true;
13     cin>>w1>>d1>>w2>>d2;
14     if(!w1) b1=solve(w1);
15     if(!w2) b2=solve(w2);
16     w=w1+w2;
17 //    printf("b1=%d
",b1);
18 //    printf("b2=%d
",b2);
19 //    printf("w=%d
",w);
20     return b1&&b2&&(w1*d1==w2*d2);
21 }
22 
23 int main()
24 {
25     int t,w;
26     cin>>t;
27     while(t--){
28         if(solve(w)) printf("YES
");
29         else printf("NO
");
30         if(t) printf("
");
31     }
32     return 0;
33 }
View Code
原文地址:https://www.cnblogs.com/wuyuewoniu/p/4337049.html