1. 程式人生 > 其它 >20202314 實驗九 《資料結構與面向物件程式設計》實驗報告

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)
- ...