在FriendshipGraph需要实现的方法如下图所示:
FriendshipGraph | 构造方法 |
addVertex | 在图中增加新Person,只需要调用ConcreteEdgesGraph中的add即可: |
addEdge | 为某个人增加朋友,a为这个人,b为增加的朋友,直接调用ConcreteEdgesGraph中的set即可: |
getallprople | 直接返回即可: |
getDistance | 得到两个人之间的最短距离。与Lab1类似,稍加修改即可: 实现此功能我们需要了解先广方式求最短路径的方法。首先我们需要知道若两个Person对象为同一个,则返回0。然后定义一个Map集合theway和一个Person队列myqueue,队列myqueue用来储存广搜的遍历结果,theway的Map集合用来储存广搜的所有元素及他们与第一个元素的距离。具体实现方法为首先将第一个元素c1入队,并且把第一个元素c1和下标0入集合,当队列非空时,弹出队首元素top,并且得到top在集合theway中的下标distance。然后定义一个Map为friend,执行personGraph.targets(top)得到队首元素的所有朋友的Map,然后定义Set为allfriend,对刚才的friend执行keySet()得到allfriend,只要allfriend中的元素与c2不同,就把这些元素全部入队,并且把这些元素及下标distance+1放入集合。只要队列非空,继续执行以上步骤,直到找到某个元素与c2相同并且返回这个元素在集合theway中的下标。如果直到队列为空还没找到c2,则返回-1: |
main | 复制Lab1的即可 |
在FriendshipGraph需要实现的方法如下图所示:
Person | 没有重复名字则加入,构造方法 |
getmyname | 返回本人名字,直接返回即可 |