哈工大 软件构造 Lab-2 重写FriendshipGraph

在这里插入图片描述

Re-implement the Social Network in Lab1

我们需要利用在P1中已经实现的Graph类来实现我们在第一次实验中所设计的人际关系实验P3。我们不能改变现有的规约,而只能在此基础之上,利用Graph为我们提供的方法来进行设计。

相似的,我们应该首先确定Person的定义,其次在确定FriendshipGraph的具体方法,最后通过广搜来确定distance的大小。

FriendshipGraph类

在这里,我们费劲千辛万苦实现的Graph就可以大显身手了。
在这里插入图片描述
我们将关系图声明为一个Graph类型的变量,由于已经泛化,我们可以将其中存储想要的Person类成员。首先先初始化,生成一个空图。

接下来要往里加点:(注意不能重复,因此利用迭代器检查一遍)
在这里插入图片描述

其次,要向图中加边:

加边比较容易,就是利用graph类中的set方法,要注意这里是无向图,而我们的方法是有方向的,因此要将Target和Source互换调用两次,weight赋值为1即可。

然后是返回graph的点的成员member,也非常容易实现,只需调用Graph.vertices()即可。这个方法主要是为了搜索时的遍历而单独声明。

最终是核心算法,利用广搜,可以计算最短路径,在这里不加赘述。

Person类

首先我们为了保护数据,以下的数据均定义为private类型。

对于每一个Person类对象person,定义private final String name来储存他的姓名,其次用private Boolean isVisited来标记是否在搜索时被访问过。随后定义几个需要的观察者方法,来获取person的name和isVisited标记,并对标记初始化的函数initial和改变标记的函数visit。

客户端main()

实验要求直接使用Lab1中的main函数,我们不加改动的将其复制过来即可,运行一下观察结果的正确性。

在这里插入图片描述

可以看到,这里的输出与我们标记的预计的输出是一致的,初步表明程序基本实现了预期的目标。

测试用例

测试用例主要关注于FriendshipGraph中的函数,而main函数主要起了调用的功能,因此无需测试。

对于加点,我们要考虑在空图中加新点,在已有非空图中添加新点,新点的name已经出现会报错,并终止程序。

在这里插入图片描述

对于加边,我们要考虑边的起始点不能相同,权值必须是正的。

对于计算距离,我们要考虑图中有环、联通性等对于距离的影响,包括自己到自己的距离等等,测试各种可能出现的情况,并验证实际值是否与理论值相同。

在这里插入图片描述

提交至Git仓库

如何通过Git提交当前版本到GitHub上你的Lab2仓库。

在这里给出你的项目的目录结构树状示意图。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HIT-Steven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值