哈工大 软件构造 Lab-2 重写FriendshipGraph
时间:2023-04-10 04:07:01
Re-implement the Social Network in Lab1
我们需要使用它P已实现1中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仓库。
给出您的项目目录结构树示意图。