20202314 實驗九 《資料結構與面向物件程式設計》實驗報告
#202023142021-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)
- ...