20202314 实验九 《数据结构与面向对象程序设计》实验报告
# 20202314 2021-2022-1 《数据结构与面向对象程序设计》实验九报告
课程:《程序设计与数据结构》
班级: 2023
姓名: 王鑫垚
学号:20202314
实验教师:王志强
实验日期:2021年12月16日
必修/选修: 必修
一、实验内容
(1) 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分)
(2) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分)
(3) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分)
(4) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分)
(5) 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分)
实验源码(写了整整一晚上+一上午):
有向图、无向图、测试类。
https://gitee.com/besti2023javads/wang-xinyao-20202314/blob/master/test9/Graph.java
https://gitee.com/besti2023javads/wang-xinyao-20202314/blob/master/test9/UNGraph.java
https://gitee.com/besti2023javads/wang-xinyao-20202314/blob/master/test9/Graphtest.java
二、实验过程及结果
(1) 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分)
这里我比较笨,采用了邻接矩阵的方式来表示一个图
有向图↑
无向图↑
(2) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分)
设计的深度广度遍历的图
结果与预期一致!!呜呜呜
(3) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分)
预期的拓扑排序情况
实际情况,与预期一致!泪流满面。
(4) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分)
这里使用了Prim算法
预期结果!
实际情况,一致!太感动了。
(5) 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分)
写的时候没发现,其实图里有两个路径都是路径合为9,0-1-3-5以及0-2-3-5
这里迪杰斯特拉要输入的边和权重特别多,所以我把要输入的量直接一股脑放到了一起,测试的时候就不用一个一个输入了(看最上面那一行绿的)
一直要么报错要么结果不对应,来来回回写了得十几次二十几次……好歹是做出来了
三. 实验过程中遇到的问题和解决过程
- 问题:各种类报错或者不能正常运行
- 问题解决方案:
感动,终于是做出来了首先是。 其实我的代码跟网上比较成熟的算法比起来麻烦很多(因为是自己写的),测试的时候,一直结果不对或者报错,我就一个地方一个地方的对着值算,找逻辑上的漏洞,然后就是打补丁,一直加各种各样的附加条件,最后就是if 和 for一直套一直套, 一个程序最后就看起来非常恐怖,其实用的很多都是我自己的笨方法……
## 其他(感悟、思考等)
挺好的,做出来心里舒坦多了,太感动了。
## 参考资料
- [《Java程序设计与数据结构教程(第二版)》](https://book.douban.com/subject/26851579/)
- [《Java程序设计与数据结构教程(第二版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)
- ...