示例1
输入:
3 2
ABC
CDE
EFG
FA
BE
输出:
great-grandparent
-

思路分析

显然是一道并查集的简单运用,我们利用c++的特性,map直接存储父子关系即可。然后利用dfs进行两次遍历(为什么进行两次遍历,因为在输入的需要查找关系中,不确定前后两者谁是长者)


代码解析

#include<iostream>
#include<map>
using namespace std;
typedef map<char, pair<char, char>> MyMap;
bool answer = false;
int ccnt = 0;
void solve(MyMap mp, char c, char p, int& ans) {//递归dfs搜索if (c == p) {answer = true;ccnt = ans;return;}else if (mp.find(c) == mp.end())return;char cur = mp[c].first;int cnt = ans + 1;solve(mp, cur, p, cnt);cur = mp[c].second;solve(mp, cur, p, cnt);
}
void Output(int ans,int tag) {//如果是长者关系if(tag == 1){if (ans == 1)cout << "parent" << endl;else if (ans == 2)cout << "grandparent" << endl;else {string str = "grandparent";for (int i = ans; i > 2; i--)str = "great-" + str;cout << str << endl;}}else{if (ans == 1)cout << "child" << endl;else if (ans == 2)cout << "grandchild" << endl;else {string str = "grandchild";for (int i = ans; i > 2; i--)str = "great-" + str;cout << str << endl;}}
}
int main()
{int n, m;string str;MyMap mp;while (cin >> n >> m) {for (int i = 0; i < n; ++i) {cin >> str;//存储父母与孩子的关系mp[str.at(0)].first = str.at(1);mp[str.at(0)].second = str.at(2);}//关系判断for (int i = 0, ans; i < m; ++i) {cin >> str;ans = 0;//由于存在不确定FA谁是长者,那么需要两次遍历solve(mp, str[0], str[1], ans);if (answer)Output(ccnt,0);else {ans = 0;solve(mp, str[1], str[0], ans);if (answer)Output(ccnt,1);elsecout << "-" << endl;}answer = false;ccnt = 0;}}
}

运行结果

计算机考研复试之KY122 找出直系亲属(c++)相关推荐

  1. KY122 找出直系亲属

    KY122 找出直系亲属 def cntGen(parentsDict, descendant, ascendant):if descendant not in parentsDict:return ...

  2. 武汉大学计算机考研 专业课程,2018武汉大学计算机考研复试经验贴

    2018武汉大学计算机考研复试经验贴 武汉大学 发布于2019年9月22日 12:25 阅读数 18196 初试唯一要讲的就是专业课问题,今年专业课改革,只考两门专业课.一门是数据结构,分值为90分, ...

  3. HDU3786 找出直系亲属【关系闭包】

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

  4. 计算机考研复试面试常问问题 数据库篇

    计算机考研复试面试常问问题 数据库篇 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高!绝对良 ...

  5. 计算机考研复试面试常问问题 计算机网络篇(上)

    计算机考研复试面试常问问题 计算机网络篇(上) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更 ...

  6. 计算机考研复试上机算法学习

    计算机考研复试上机算法学习 这篇博客是博主在准备可能到来的线下上机复试基于王道机试指南的学习,将各道习题链接和代码记录下来,这篇博客权且当个记录. 文章目录 计算机考研复试上机算法学习 1.STL容器 ...

  7. 【编译原理】计算机考研复试问答题总结

    [编译原理]计算机考研复试问答总结 因为复试专业课需要考编译原理,线上复试总结一些编译原理的相关题目~ (ps:只是一些面试的一些概念简答题,如果有笔试相关类型的题目要好好写) 第一章 编译概述 Q1 ...

  8. 河海大学20计算机考研复试回忆

    河海大学20计算机考研复试回忆 2020年真的是很特殊的一年,全国上下共同奋战抵抗疫情,最终取得了阶段性胜利,距离完全胜利可能还需要点时间.与此同时,以考研为首的各种重要考试也不得不延期或转变考试方式 ...

  9. 计算机考研复试面试常问问题 计算机网络篇(下)

    计算机考研复试面试常问问题 计算机网络篇(下) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更 ...

  10. 路由器下一跳地址怎么判断_计算机考研复试面试常问问题 计算机网络篇(下)...

    计算机考研复试面试常问问题 计算机网络篇(下) 在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更 ...

最新文章

  1. leetcode解题文件夹
  2. 27_线程安全操作及其案例
  3. django在window和linux,从windows导入Django项目到linux时出错
  4. 如何在20130513image上,备份NAND到SD卡,然后把这个SD卡做成可以自启动的SD卡
  5. php 上传乱码_php上传文件名乱码了怎么办
  6. oracle没有卸载,oracle卸载没有正确卸载怎么办?
  7. html行内设置样式,Js获取/设置行内样式和非行内样式
  8. 事务的特性——持久性(实现原理)
  9. 靖哥哥教你如何用java做爬虫抓取网站美女图片(详解步骤)
  10. 斩获微软offer后,我总结出这10个面试必备技巧(五星干货)
  11. 从输入域名,到拿到首页的所有细节过程
  12. hls简述(HTTP live Streaming)
  13. 如何完成一份优秀的前端求职简历?
  14. Html+Css面试题及答案
  15. 性能优化---vue路由懒加载和异步组件
  16. 长江水质的评价和预测——主要污染地区
  17. Python图片读显写的几种方式
  18. VRP问题总结——直观理解
  19. 精美创意美食卡通PPT-朴尔PPT
  20. python中的input_string是什么意思_python中的input函数什么意思

热门文章

  1. vpython_vpython初探
  2. Floating point exception (core dumped)解决
  3. 新品周刊 | 雀巢脆脆鲨推出坚果巧克力威化;金宾波本威士忌推出父子合作酒品...
  4. 多图体验:最强大的Win8.1开始菜单Classic Shell 3.9.1
  5. linu快速删除文件
  6. Predefined Evenly-Distributed Class Centroids(PEDCC)预定义类中心做分类解读
  7. #467 – 使用UniformGrid 均分行和列(Use a UniformGrid for Evenly Spaced Rows and Columns)
  8. Mac Pro 开不了机
  9. excel中插入的图表保存时提示 无法保存 html,Excel技巧:将图表另存为GIF文件
  10. 计算机ip地址是指什么作用是什么,ip地址的作用是什么