uva839-Not so Mobile-二叉树的DFS
2016-05-20 17:20
323 查看
题意:
输入一个树状的天平,根据力矩相当原则判断是否平衡,也就是W1*D1=W2*D2 ,其中W是砝码的重量,D是力矩。采用递归先序的
方式输入,每个天平的格式为W1,D1 W2,D2 当W1,W2 为0的时候,表示该天平实际上是一个子天平,接下来会描述子天平,当
W1=W2 =0时,会先描述左子天平,然后是右子天平。
input:
1
0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2
output:
YES
分析:
解决这样的题目之前,首先要理解题目的意思,当然这是对于新手来说的,首先将测试样例在纸上画出来,确保正确理解输入格
式。在这里有个小建议:当遇到题目比较复杂的时候,建议先手算样例或者至少把样例的图示画出来,以免误解题意。本题的输入
是采用的递归方式定义,因此需要根据题意编写一个递归过程进行输入,事实上,再输入的过程中就可以进行平衡的判断,可以
使用引用传值。
代码:
小结:本题是二叉树的DFS,虽然简单但是极为重要,要经常回头看看本题,理解本题的意思。
输入一个树状的天平,根据力矩相当原则判断是否平衡,也就是W1*D1=W2*D2 ,其中W是砝码的重量,D是力矩。采用递归先序的
方式输入,每个天平的格式为W1,D1 W2,D2 当W1,W2 为0的时候,表示该天平实际上是一个子天平,接下来会描述子天平,当
W1=W2 =0时,会先描述左子天平,然后是右子天平。
input:
1
0 2 0 4
0 3 0 1
1 1 1 1
2 4 4 2
1 6 3 2
output:
YES
分析:
解决这样的题目之前,首先要理解题目的意思,当然这是对于新手来说的,首先将测试样例在纸上画出来,确保正确理解输入格
式。在这里有个小建议:当遇到题目比较复杂的时候,建议先手算样例或者至少把样例的图示画出来,以免误解题意。本题的输入
是采用的递归方式定义,因此需要根据题意编写一个递归过程进行输入,事实上,再输入的过程中就可以进行平衡的判断,可以
使用引用传值。
代码:
#include <bits/stdc++.h> using namespace std; //输入一个子天平并判断子天平是否平衡,参数W修改子天平的总重量 bool slove(int &W) //递归输入,并进行判断 { int w1,w2,d1,d2; bool f1=true,f2=true; cin >>w1>>d1>>w2>>d2; if(!w1) f1=slove(w1); if(!w2) f2=slove(w2); W=w1+w2; return f1&&f2&&(w1*d1==w2*d2); } int main() { int t,w; cin >>t; while(t--) { if(slove(w)) cout <<"YES."<<endl; else cout <<"NO."<<endl; } cout <<endl; return 0; }
小结:本题是二叉树的DFS,虽然简单但是极为重要,要经常回头看看本题,理解本题的意思。
相关文章推荐
- 数字字符串转为指定数组
- iOS面试那点事
- Apple Watch程序开发30分钟秒懂
- 实现鼠标穿透窗体
- hibernate复合查询
- 深入Java集合学习系列:ArrayList的实现原理
- 【mysql】order by 优化与索引的应用
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Notepad++ 快捷键 大全
- FFmpeg Filtering Guide
- ckplayer 中的style.swf 中的 style.xml 中的修改方法
- 加速Android Studio/Gradle构建
- XSI IPC之消息队列实例
- Tensorflow source build on MAC EI Capitain
- 离散FFT和图像二维FFT变换的java实现
- mysql
- XenServer存储库SR损坏的数据恢复方案
- rutime中动态调用类的方法
- 对象映射组件Tiny Mapper
- android应用版本更新功能---完整版