您的位置:首页 > 其它

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

分析:

解决这样的题目之前,首先要理解题目的意思,当然这是对于新手来说的,首先将测试样例在纸上画出来,确保正确理解输入格

式。在这里有个小建议:当遇到题目比较复杂的时候,建议先手算样例或者至少把样例的图示画出来,以免误解题意。本题的输入

是采用的递归方式定义,因此需要根据题意编写一个递归过程进行输入,事实上,再输入的过程中就可以进行平衡的判断,可以

使用引用传值。

代码:

#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,虽然简单但是极为重要,要经常回头看看本题,理解本题的意思。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: