实验九 《图》
# 20202306 2021-2022-1 《数据结构与面向对象程序设计》实验九报告
课程:《程序设计与数据结构》
班级: 2023
姓名: 李金城
学号:20202306
实验教师:王志强
实验日期:2021年12月18日
必修/选修: 必修
## 1.实验内容
(1) 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分)
(2) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分)
(3) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分)
(4) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分)
(5) 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分)
## 2. 实验过程及结果
(1)初始化
码云链接:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Graph2306.java
(2)图的遍历
![](https://img2020.cnblogs.com/blog/2532419/202112/2532419-20211218165203699-1501214724.png)
码云链接:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/reergodic2306.java
(3)拓扑排序
码云链接:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/DirectedGraph.java
(4)最小生成树
码云链接:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/Prim.java
(5)迪杰斯特拉算法
码云链接:https://e.gitee.com/besti-cs/repos/besti-cs/ljc20202306_Java/blob/bin/src/src/Dijsrtra2306.java
## 3. 实验过程中遇到的问题和解决过程
- 问题1:算法理解上就有一定难度,再利用java语言描述的时候感觉思路上难以衔接。
- 问题1解决方案:先构建出程序方法思路,将方法单独列出再调用,参考书中范例和课程所讲,进行摸索和模仿。
- 问题2:图的编程与树很不一样,需要转换思维,更多地利用矩阵去解决问题。
- 问题2解决方案:将图与树进行类比,进行区别,转换思维。
## 其他(感悟、思考等)
数据结构课程眼看着也要到结尾了,不由分说的是难度也上升了很多,学习变得复杂,应用性变强,理解上来也产生困难。我知道自己在编程语言中,即使学过该课程也依旧是个学徒,需要我去学习、尝试的地方还有很多,从前学过的知识也不能说完全掌握,亟待复习和更深度的学习。浩瀚无穷中我只沧海一粟,更鞭策了自己要更加努力地学习编程知识,更好地用编程语言去描述思维,描述世界。
## 参考资料
- [《Java和Andriod开发学习指南(第二版)人民邮电出版社》]
- [《Java软件结构与数据结构(第三版)清华大学出版社》]
- https://blog.csdn.net/qq_34842671/article/details/90083037