uva839-Not so Mobile-二叉树的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,虽然简单但是极为重要,要经常回头看看本题,理解本题的意思。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值