前言仅供参考学习
题目:查找知识图谱中的实例知识
题目描述
知识图谱的实例(200分)
知识图谱是一种结构化的语义网络,用于描述物理世界中的概念及其实例的相关关系。
可以把知识图谱看成是以种有向图,图中的点是概念或实例,图中的边是概念及其实例的相关
光系。
现定义一种简单的知识图谱:
概念:包括父概念及其子概念,通过subClassOf关联关系,父子概念可以游多个层级
实例:仅和概念之间通过instanceOf关系关联;
关系:以三元组的形式表示,三元组是一个以空格为成员间分隔符的字符串。
例如:“student subClassOf fruit”表示student是person的子概念;
“apple instanceOf fruit”表示apple是概念fruit的实例
给定一个资是图谱,请编写一个方法,可以根据一个概念查找其所有的实例
如果一个概念拥有子概念,那么返回的结构需要包含其所有子概念的实例;
如果输入的概念没有实例,则返回字符串“empty”(说明:输出字符串文本不需要包含
引号)
给定的图谱满足一下限制:
1.有向图中不存在环路;
2.所有点和关系的定义对大小写敏感;
输入
输入第一行,表示图谱中关系的数量n,取值范围【1,10000】;
从第二行到第n+1行,表示图谱中的关系,每一行是一个关系三元组;
第n+2行,表示待查的元节点,是关系三元组中存在的点;
每行字符的长度不超过100
输出
按字典序升序排列的字符串数组,其内容是概念及其子概念的所有实例。
样例一
输入:
3
student subClassOf person
Tom instanceOf student
Marry instanceOf person
person
输出:
Marry Tom
解释:student是person的子概念,Tom是student的实例,Marry是person的实例,Marry的字典序小于Tom,所以Marry Tom
样例二:
1
student subClassOf person
person
输出:
empty
解释没有实例。
参考代码:

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <queue>
using namespace std;struct Node {string key;vector<string> *lg = nullptr;        //存放这个概念包含实例;vector<Node>* childnode = nullptr;  //存放子概念Node(string k) :key(k){lg = new vector<string>();childnode = new vector<Node>();}bool operator <(const Node& a)const{return key < a.key;}
};
struct cmp {bool operator ()(string &a,string &b){return a > b;}
};int main()
{int n;cin >> n;map<string, Node> graph;  //图string line;vector<vector<string>> vec;for (int i = 0;i<=n;i++)   //建立一张图{getline(cin,line);stringstream ss(line);string temp;vector<string> vec_temp;if (i == 0)continue;while (getline(ss,temp,' ')){vec_temp.emplace_back(temp);}vec.emplace_back(vec_temp);if (graph.find(vec_temp[2]) == graph.end())        //如果这个概念没有的话,{graph.emplace(vec_temp[2],Node(vec_temp[2]));  //为图中新建一个点}if (vec_temp[1] == "subClassOf")                   //概念关联{if (graph.find(vec_temp[0]) == graph.end()){graph.emplace(vec_temp[0],Node(vec_temp[0]));}Node sub = graph.find(vec_temp[0])->second;graph.find(vec_temp[2])->second.childnode->emplace_back(sub);}else {                                             //实例关联string instance = vec_temp[0];graph.find(vec_temp[2])->second.lg->emplace_back(instance);}}//bfspriority_queue<string, vector<string>, cmp> b_heal; //大根堆string target;cin >> target;queue<Node> myqueue;myqueue.push(graph.find(target)->second);while (!myqueue.empty()){int n = myqueue.size();for (int i = 0;i<n;i++){Node tp = myqueue.front();myqueue.pop();for (auto k:*tp.lg)                        //存进实例{b_heal.emplace(k);}for (auto j : *tp.childnode)  {myqueue.push(j);}}}if (b_heal.empty()){cout << "empty" << endl;return 0;}while (!b_heal.empty()){cout << b_heal.top() << ' ';b_heal.pop();}//最后应该释放node中申请的内存return 0;
}

小结:图这个数据结构建图比较麻烦。这道题是一道bfs的题目。代码注释得比较清晰了,看下代码就知道思路了。

最近华为笔试题(9.1)第二题相关推荐

  1. 京东第八批C/C++笔试题10.15第二题答案

    题目:一个字符串相邻的字母在字母表中也是相邻的,那么该字符串称为好字符串.小红有一个想知道,输入一个字符串,删除字符串中的某些字母,使字符串是好字符串,且好字符串长度最长是多少? 举例: 输入:baa ...

  2. 【leetcode】第394题:字符串解码(华为笔试题)

    题目:给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. ...

  3. 2014-百度 阿里 华为笔试题

    8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面拿出来两个球:     ii.如果取出的是两 ...

  4. 2019届华为笔试题(软件卷)

    华为笔试题共3道编程题.第一题100分,第二题200分,第三题300分,一共600分. 第一题: 输入描述: 1.忽略小数点,例如"A1.2",认为包含整数1和2: 2.如果整数的 ...

  5. 华为笔试题---明明的随机数

    题目 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着 ...

  6. 腾讯QQ2008年笔试题中的附加题(30分)

    //腾讯QQ2008年笔试题中的附加题(30分) //从程序健壮性进行分析,下面的FillUserInfo函数和main函数分别 //存在什么问题?#include <iostream> ...

  7. 华为笔试题 -- 多个数组按顺序合并(Java代码实现)

    华为笔试题 – 多个数组按顺序合并(Java代码实现) 题目描述: 现在有多组整数数组,需要将他们合并成一个新的数组.合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉 ...

  8. 第一次社招笔试题回顾(全基础题)

    第一次社招笔试题回顾 在上个月裸辞之后,休息了近一个月,最近开始找工作,发现很多基础自己忘了挺多的.从校招过后,到现在,将近1年多没有怎么做过算法题,Eclipse,Idea这几个都用的比较少. 一家 ...

  9. java笔试题_公司真题 | 用友2018秋招Java笔试题(四)

    公司真题 | 用友2018秋招Java笔试题(三)答案: 1.正确答案 A B 2.正确答案 A 3.正确答案 D 4.正确答案 B 5.正确答案 A E 6.正确答案 B 7.正确答案 C D 8. ...

  10. 2016百度春招笔试题(高中熟悉的题现在却变得陌生)

    一.前言 前几个星期的面试题都有点稀奇古怪,这个星期来一个正常点的题目,可是这题目可能对于个别人来说是如此的熟悉但又很陌生.因为那是我们高中时常做的题目,现在却还给老师了.那让我们好好回忆一下. 二. ...

最新文章

  1. 归一化互相关Normalization cross correlation (NCC)
  2. 实战应对三种因素引起的交换故障
  3. (chap2 TCP/IP基础知识) TCP/IP协议分层模型
  4. 跟一个刚毕业不久的码农聊天后被凡尔赛了
  5. 55种数据可视化开源工具_6种用于撰写书籍的开源工具
  6. 京东壕掷27亿买下一座酒店 官方回应:以办公为主!
  7. pwm波程序如何实现_【优秀成果】如何做好算法与程序实现教学的知识储备
  8. 步步为营-87-imageAreaSelect插件使用(图片剪切)
  9. 问题四十六:怎么用ray tracing画superellipsoid
  10. AOP:静态代理实现方式①通过继承②通过接口
  11. MyCat重要概念以及基础配置详解
  12. windows CMD 下 长ping 加时间戳,亲测有效
  13. Linux内核移植介绍
  14. win10 共享打印机错误0x00000709修复
  15. 计算机cpu电压,怎么才能知道自己电脑的cpu电压
  16. 程序员是如何失去女朋友的
  17. 关于所谓U盘有占用空间,却看不到文件的一些看法
  18. MEC — 边缘网络
  19. Vue.js使用Blob的方式实现excel表格的下载(流文件下载)
  20. vue简单的数字滚动动画

热门文章

  1. linux主引导修复工具,Boot-Repair/引导修复工具
  2. 东秦数模美赛校赛记录——紧急车辆位置.题目
  3. CS231n第一次作业_问题1
  4. jmeter json提取器和正则表达式提取器
  5. Java实现视频加密及播放
  6. 【NOIP2017】宝藏
  7. 新闻丨智链万源受邀参加世界动物福利科学大会
  8. 机器学习数学基础篇一:高数基础
  9. STM32F103实现LED呼吸灯程序
  10. 计算机一级四五章重点,《信息技术》第四章要点