UVA 839 Not so Mobile

本文介绍了一种使用递归方法判断树状天平是否平衡的算法。通过先序输入方式,根据力矩相等原则实时判断每个子天平的平衡状态,最终确定整棵树的平衡性。

思路:

记得自己画个图。

 1 // 题意:输入一个树状天平,根据力矩相等原则判断是否平衡。采用递归方式输入,0表示中间结点
 2 // 算法:在“建树”时直接读入并判断,并且无须把树保存下来
 3 #include<iostream>
 4 using namespace std;
 5 /*
 6 先序输入
 7 如果输入 0 2 0 4
 8 cin>>W1>>D1>>W2>>D2
 9 w1=0说明此位置还是一个节点,两边没有砝码,
10 所以继续递归,直到w1!=0,两边是砝码,然后根据距离和砝码算是否平衡
11 每次递归引用w,不停修改,w就是此位置的砝码的总质量
12 */
13 // 输入一个子天平,返回子天平是否平衡,参数W修改为子天平的总重量
14 bool solve(int& W) {
15     int W1, D1, W2, D2;
16     bool b1 = true, b2 = true;
17     cin >> W1 >> D1 >> W2 >> D2;
18     if (!W1) b1 = solve(W1);
19     if (!W2) b2 = solve(W2);
20     W = W1 + W2;//修改此位置的砝码的总质量
21     return b1&&b2 && (W1*D1 == W2*D2);
22 }
23 
24 int main() {
25     int T, W;
26     cin >> T;
27     while (T--) {
28         if (solve(W)) cout << "YES\n"; else cout << "NO\n";
29         if (T) cout << "\n";
30     }
31     return 0;
32 }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值