实验二的第二题与实验一第三题相关,放在一起看一看
第一题诗意漫步
第一题就简单说一说
这个任务总体分成了两大部分,其中第一部分是要我们自己用两种不同的方式设计一个图类,是带有标记顶点的可变加权有向图的抽象数据类型。首先我们需要根据提示先对测试用例进行设计,然后分别完成针对String的边实现和点实现,然后进一步将可以支持的类型拓展到泛型。实验这一部分完成之后还需要根据这个图形结构生成一个诗歌生成工具,添加一些满足条件的词语到语句中。
在这个题主要是练习构造类,实现方法,AF RI safety from rep exposure
第二题社交网
先说一下和实验一有关部分
设计friendship graph类
public boolean addVertex(Person person)
将person这个节点添加到persons中,同时判断是否存在重名的问题,如果有,直接返回false,如果没有,就将其名字加入names中,返回true。
public boolean addEdge(Person per1, Person per2)
两次调用Person类中的addFriend函数即可,同时注意判断两个人是否是同一个人,并返回对应结果
使用了广度优先搜索:初始化visited中的每个点的vis属性为false,dis中的为0将per1加入队列temp,并visited.put(src.getName(), true)检查队列是否为空 若是,结束循环,返回-1 若否,取出队首节点存入vertex,重复之前操作搜索per1的friends set(在Person类中实现)中未访问过的节点 如果有子节点等于per2,即找到一条最短路,结束搜索,返回当前的路径长度 否则,将满足要求的子节点依次加入队列,将其visited对应值置为true所有满足条件的子节点扫描完之后,对应节点的dis ++;
设计person类
存储名字和朋友,来实现单边关系。
关于第二部分
在实验二第一题进行修改
1.FriendshipGraph的字段为Person构成的ConcreteEdgesGraph,定义私有类型的表如下图所示:
2.需要实现的方法
构造方法 FriendshipGraph
在图中新增加person,调用之前在ConcreteEdgesGraph中写过的的add addVertex
为某个人增加朋友调用ConcreteEdgesGraph中的set addEdge
getallprople 直接返回即可:
得到两个人之间的最短距离 getDistance
主函数
1.私有类型表
2.实现方法
Person 没有重复名字加入
getmyname 返回本人名字,直接返回即可