题目1035:找出直系亲属

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:1309

解决:521

题目描述:
如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。
输入:
输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50), 分别表示有n个亲属关系和m个问题, 然后接下来是n行的形式如ABC的字符串,表示A的父母亲分别是B和C,如果A的父母亲信息不全,则用-代替,例如A-C,再然后是m行形式如FA的字符串,表示询问F和A的关系。
当n和m为0时结束输入。
输出:
如果询问的2个人是直系亲属,请按题目描述输出2者的关系,如果没有直系关系,请输出-。
具体含义和输出格式参见样例.
样例输入:
3 2
ABC
CDE
EFG
FA
BE
0 0
样例输出:
great-grandparent
-
来源:
2009年浙江大学计算机及软件工程研究生机试真题
MYCode
#include<iostream>
#include<cstring>
#include<cstdio>
using  namespace std;
#define MAX  110
int pre[ 27];
int find( int id1,  int id2)
{
     int  ct =  0;
     while(id1 != id2 && id1 != - 1)
    {
        id1 = pre[id1];
        ct++;
    }
     if(id1 == id2)
         return ct;
     return  0;
}
int main()
{
     int n, m;
     while(scanf( "%d%d", &n, &m) != EOF)
    {
         if(n ==  0 && m ==  0)
             break;
        memset(pre, - 1,  sizeof(pre));
         char str[ 3];
         int i;
         for(i =  1; i <= n; i++)
        {
            scanf( "%s", &str);
             int a, b = - 1, c = - 1;
            a = str[ 0] -  'A';
             if(str[ 1] >=  'A' && str[ 1] <=  'Z')
                b = str[ 1] -  'A';
             if(str[ 2] >=  'A' && str[ 2] <=  'Z')
                c = str[ 2] -  'A';
             if(b != - 1)
                pre[b] = a;
             if(c != - 1)
                pre[c] = a;
        }
         /*for(i=0;i<26;i++)
        cout<<pre[i]<<" ";
        cout<<endl;*/
         for(i =  1; i <= m; i++)
        {
             char ch1, ch2;
            cin >> ch1 >> ch2;
             int index1 = ch1 -  'A';
             int index2 = ch2 -  'A';
             bool flag =  false;
             int res1 = find(index2, index1);
             //cout<<"res1="<<res1<<endl;
             if(res1)
            {
                flag =  true;
                 switch(res1)
                {
                 case  1:
                    cout <<  "child" << endl;
                     break;
                 case  2:
                    cout <<  "grandchild" << endl;
                     break;
                 default:
                     for( int k = res1; k >=  3; k--)
                        cout <<  "great-";
                    cout <<  "grandchild" << endl;
                     break;
                }
            }
             else
            {
                 int res2 = find(index1, index2);
                 //cout<<"res2="<<res2<<endl;
                 if(res2)
                {
                    flag =  true;
                     switch(res2)
                    {
                     case  1:
                        cout <<  "parent" << endl;
                         break;
                     case  2:
                        cout <<  "grandparent" << endl;
                         break;
                     default:
                         for( int k = res2; k >=  3; k--)
                            cout <<  "great-";
                        cout <<  "grandparent" << endl;
                         break;
                    }
                }
            }
             if(!flag)
                cout <<  "-" << endl;
        }
    }
}

//status:accepted

根据题目给的数据构建一棵二叉树
比如 题目给出的数据可以构成下面的二叉树
A
↙↘
BC
↙↘
D E
↙↘
F     G
判断F和A是否具有直系关系
从F一直向上搜索
F到E到C到A
找到了A说明F和A具有直属关系。
否则不具有直属关系。

九度OJ 1035:找出直系亲属(二叉树)相关推荐

  1. 九度[1035]-找出直系亲属

    九度[1035]-找出直系亲属 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A, ...

  2. 九度oj题目1385:重建二叉树

    题目1385:重建二叉树 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4419 解决:1311 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和 ...

  3. 打不开磁盘配额linux,九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)...

    题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最 ...

  4. Freckles - 九度 OJ 1144

    Freckles - 九度 OJ 1144 题目 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: In an episode of the Dick Van Dyke show, l ...

  5. 非常可乐(九度 OJ 1457)

    非常可乐(九度 OJ 1457) 时间限制:1 秒 内存限制:32 兆 特殊判题:否 1.题目描述: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是 seeyou 却不这么认为.因为每次当 see ...

  6. 九度OJ——1028继续畅通工程

    题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修 ...

  7. Leagal or Not - 九度 OJ 1448

    Leagal or Not - 九度 OJ 1448 题目 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: ACM-DIY is a large QQ group where man ...

  8. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  9. hdu3786 找出直系亲属 水题

    题意: 找出直系亲属 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

最新文章

  1. 广播站 PHP,让一实听见你的声音——“校园之声”广播站招募小记
  2. 推荐些在线小制作小工具
  3. Linux-常用系统管理命令
  4. java常见_Java 常用类
  5. IOS学习笔记二十NSSet和NSMutableSet
  6. ssm框架里面前端拿HTML写,ssm框架引入Vue,声明式渲染,标签的href拼接字符串
  7. bat获取命令返回值_redis中list和hash的基本命令和使用场景
  8. ftp linux 服务器 麒麟_阿里云ECS服务器搭建vsftpd
  9. html5游戏开发-零基础开发RPG游戏-开源讲座(四)
  10. windows xp 的开机黑屏只有光标闪动的解决方法
  11. java对接微信公众号
  12. error C2440: “类型转换”: 无法从“LPVOID”转换为“double
  13. Centos7 制作系统iso镜像文件
  14. 成功的客户关系项目管理实施案例的共同特点
  15. 2021年安全员-A证(江西省)报名考试及安全员-A证(江西省)考试平台
  16. 灵飞经3 印神无双 第十四章 印神古墓 3
  17. Android 9 Pie
  18. 初级中学理化生实验室建设与配备标准
  19. 金山办公测试开发面试总结
  20. 我的2014作的一手好死,2015求轻虐

热门文章

  1. 小程序实战1-项目总览
  2. 《iPad开发从入门到精通》——6.2节系统主界面
  3. LVS负载均衡DR模式+keepalived
  4. win7 nodejs找不到express命令
  5. 容灾技术中的数据一致性保障
  6. 程序员面试金典——7.3判断直线相交
  7. 程序员面试金典——1.7清除行列
  8. few-shot learning, zero-shot learning, one-shot learning,any-shot learning, C-way K-shot,Meta-learn
  9. 多层RNN的定义与理解
  10. 【信息学奥赛一本通 提高组】第一章 贪心算法