uva 839

原创 2015年11月20日 19:15:38

题目大意:
用树模拟天平。判断是否平衡。

思路:
输入的时候要是第一个数字或第三个数字为0的话就表示说他们还有左子树或右子树,如果不为0就是NULL,就利用这种方法建树,然后判断他们是否平衡t->Dl *t->Wl是否等于 t->Dr *t->Wr,不平衡就可以置标记为false,如果等于零的话就递归。

#include <iostream>
using namespace std;

struct Node
{
    int Wl;
    int Dl;
    int Wr;
    int Dr;
    Node *left;
    Node *right;
};
bool ok;
Node * build()  //递归建树
{
    Node *root = new Node();
    scanf("%d%d%d%d", &root->Wl, &root->Dl,&root->Wr,&root->Dr);
    if (root->Wl == 0)
        root->left = build();
    else
        root->left = NULL;
    if (root->Wr == 0)
        root->right = build();
    else
        root->right = NULL;
    return root;
}
/*void rmTree(Node *&root)
{
    if (root == NULL) {
        return;
    }
    else {
        rmTree(root->left);
        rmTree(root->right);
        delete root;
        root = NULL;
    }
}*/
int Judge(Node * t)
{
    if (ok == false)
        return 0;
    if (t->Wl == 0)
        t->Wl = Judge(t->left);
    if (t->Wr == 0)
        t->Wr = Judge(t->right);
    if (t->Dl *t->Wl != t->Dr *t->Wr)
        ok = false;
    //return (t->Dl *t->Wl + t->Dr *t->Wr); 
    return  (t->Wl + t->Wr);
}
int main()
{
    int n;
    cin >> n;

    while (n--)
    {   
        ok = true;
        Node * root = new Node;
        root = build(); 
        Judge(root);
        if (ok)
            printf("YES\n");
        else
            printf("NO\n");
        //rmTree(root);
        if (n) printf("\n");
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

uva839解题报告

题目大意就是根据干杠平衡原理,判断题目所给出的数据组成的天平能否平衡。注意,此天平可能包含子天平。输入时,如果w为0,则表示包含子天平,子天平按照先左后右的方法输入。 解题思路: 这是二叉树的问题,...
  • WU5151
  • WU5151
  • 2015年12月30日 16:30
  • 468

UVA839 Not so Mobile【二叉树】【递归】

题目大意:给你一个树形的天平,如图所示,根据力矩相等原则判断是否相等。 注意:输入的时候采用(先序)输入,如果WL为0时,该天平有左子天平,接下来 描述这个左子天平,如果WR为0时,该天平有有右子天平...
  • u011676797
  • u011676797
  • 2014年12月11日 10:24
  • 984

UVa 839 - Not so Mobile【递归】

原题网址: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&probl...
  • liuke19950717
  • liuke19950717
  • 2016年01月14日 12:14
  • 176

例题6-9 UVa839 Not so Mobile(树)

题意: 看白书 要点: 书上的代码倒是简洁,自己写是写不出这么简洁的,递归还是差点 #include #include bool build(int &w) //这里传递地址改变w...
  • SeasonJoe
  • SeasonJoe
  • 2016年02月09日 19:29
  • 294

uva 839 Not so Mobile(抽象意义上的建树)

Not so Mobile  Before being an ubiquous communications gadget, a mobile was just a structure ...
  • u011328934
  • u011328934
  • 2013年07月31日 18:52
  • 1116

UVA839

每行的四个数据意思是,左边的重量,左边的力矩
  • yeyeyeguoguo
  • yeyeyeguoguo
  • 2014年07月25日 10:37
  • 432

uva 839

原题 简单题, 用杠杆原理判断是否平衡 没有经验, 一开始就构造了一个struct,  但是AC之后去翻了别人的代码, 发现没啥必要 因为这些数据判断完一次就没用了, 干嘛要存起来呢 还有就...
  • pb1995
  • pb1995
  • 2015年10月01日 08:40
  • 98

UVa 839

题目: 输入一个树状天平,根据力矩相等原则判断是否平衡。如图6-5所示,所谓力矩相等, 就是W l D l =W r D r ,其中W l 和W r 分别为左右两边砝码的重量,D为距离。 采用递...
  • qq_36124802
  • qq_36124802
  • 2016年11月10日 22:14
  • 98

Uva 839

UVA839 代码: #include using namespace std; #define LL long long #define INF 0x3f3f3f3 #define pi ...
  • qq_36553623
  • qq_36553623
  • 2016年12月25日 12:48
  • 55

UVA 839

一道二叉树的题,对于新手掌握处理先序序列有很大帮助,题主也是做了这道题对先序序列的处理更加熟练 题目就是给了很多行杠杆数,通过看图可发现,每一个杠杆就是一个节点,得先判断子节点是否平衡,并计算重量才...
  • zspatial
  • zspatial
  • 2016年02月16日 23:46
  • 243
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uva 839
举报原因:
原因补充:

(最多只允许输入30个字)