请注意,这是一个主要关注数据结构的问题
介绍
Bacefook希望人们变得更加友好!因此,他们正在实施一个新系统来推荐朋友!您的任务是帮助Bacefook实施新的建议系统。
规格:
你的程序必须是支持3种类型的命令的一个REPL(读取-求值-输出循环): FRIEND
,SUGGEST
和KNOW
。
FRIEND X Y
-指定X
和Y
是社交网络中的朋友。
如果X是Y的朋友,那么Y是X的朋友
可以,但不必输出
X永远是X的朋友
KNOW X Y
-如果X和Y是朋友,则输出真实值,否则输出虚假值
KNOW X X
将始终输出真实值
SUGGEST X Y
-如果X和Y应该是朋友,则输出真实值,否则输出虚假值。如果满足以下条件,则X和Y应该是朋友:
X和Y不是朋友
X和Y至少有1个共同的朋友
你被允许代替FRIEND
,SUGGEST
并KNOW
用自己的字符串,但你必须谈不上什么串您更换每个命令。
您的程序可以以任何希望的方式接受输入/产生输出,只要可以相当容易地识别其工作方式即可。
社交网络中的人数N
在1到100,000之间,但是可能有任意数量的“朋友链接”(边缘)。
如果您尚未注意到,这是一个图形搜索问题。实现此功能的(可能)最简单(可能最快)的数据结构将是邻接矩阵。
测试用例
FRIEND A B
FRIEND A C
FRIEND B D
SUGGEST A B -> Falsy, as they are friends
SUGGEST A D -> Truthy, as they share B as a common friend
SUGGEST C D -> Falsy, they do not share a common friend
KNOW D B -> Truthy, they are friends
KNOW B C -> Falsy, not friends
=============
FRIEND Tom Tim
KNOW Tom Tim -> Truthy
KNOW Tim Tom -> Truthy
KNOW Tom Kit -> Falsy
=============
KNOW Tim Kit -> Falsy
FRIEND Tim Tom
KNOW Tim Kit -> Falsy
FRIEND Tom Kit
SUGGEST Tim Kit -> Truthy
=============
FRIEND X Y
SUGGEST X Y -> Falsy since X is friends with X
获胜条件
这是代码高尔夫球,最短的代码获胜!
SUGGEST UK EU
。
{A, B, C, D}
吗?