


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、一、作品要求編寫求帶權(quán)圖的單源最短路徑程序。二、學(xué)生作品分析1、代碼分析代碼分析如下:public class AdjMatrixGraph extends AbstractGraph類,繼承抽象圖類/鄰接矩陣表示的圖protected SeqList vertexlist;/順序表圖的頂點集合protectedprivate final adjmatrix;MAX_WEIGHT =/圖的鄰接矩陣eger.MAX_VALUE; /最大權(quán)值(表示無窮大)/privateedgeCount;/邊數(shù)?public AdjMatrixGraph(n)/構(gòu)造方法,n 指定最多頂點數(shù)this.vertex
2、list = new SeqList(n);/構(gòu)造指定容量的空順序表/構(gòu)造 n 行 n 列空矩陣/初始化圖的鄰接矩陣this.adjmatrix = newnn;for (i=0; in; i+)for (j=0; jn; j+)this.adjmatrixij= (i=j) ? 0 : MAX_WEIGHT;/邊的權(quán)值為 0 或最大權(quán)值/this.edgeCount=0;public AdjMatrixGraph(E verti, Edge edges) /以頂點集合和邊集合構(gòu)造一個圖this(verti.length);for (i=0; iverti.length; i+)insertV
3、ertex(vertii);/一個頂點for (j=0; jedges.length; j+)insertEdge(edgesj);/一條邊public AdjMatrixGraph(SeqList list, Edge edges) /以頂點集合和邊集合構(gòu)造一個圖this(list.length();this.vertexlist = list;for (j=0; j=0 & i=0 &jvertexCount() & i!=j &adjmatrixij=MAX_WEIGHT)this.adjmatrixij=weight;/this.edgeCount+;return true;retur
4、n false;publicinsertEdge(Edge edge)/一條邊if (edge!=null)return insertEdge(edge.start, edge.dest, edge.weight); return false;public String toString()/獲得圖的頂點集合和鄰接矩陣String str= 頂點集合:+vertexlist.toString()+n;str += 鄰接矩陣:n;n = vertexCount();/edgeCount+條邊 n;/頂點數(shù)for (i=0; in; i+)for(j=0; j=0 & i=0 & j=0 & vn
5、)this.vertexlist.remove(v);/刪除順序表的第 i 個元素,頂點數(shù)已減一for (i=v; in-1; i+)for (j=0; jn; j+)this.adjmatrixij = this.adjmatrixi+1j;/元素向前一行移動for (j=v; jn-1; j+)for (i=0; i=0 & v=-1 & wvertexCount() & v!=w)for (j=w+1; j0 & adjmatrixvjMAX_WEIGHT) return j;return -1;public AdjMatrixGraph minSpanTree_prim()姆算法/構(gòu)造
6、帶權(quán)圖最小生成樹的/返回最小生成樹相應(yīng)的圖對象Edge mst = new EdgevertexCount()-1;/n 個頂點最小生成樹有n-1條邊f(xié)or (i=0; imst.length; i+)發(fā)構(gòu)造最小生成樹/初始化 mst 數(shù)組,從頂點 v0 出msti = new Edge(0, i+1, adjmatrix0i+1);/保存從頂點 v0 到其他各頂點的邊的權(quán)System.out.pr(mst 數(shù)組初值:); for(j=0; jmst.length; j+)System.out.pr(mstj.toString();/顯示 mst 數(shù)組的變化過程for (i=0; imst.l
7、ength; i+)/共選出 n-1 條邊minweight = MAX_WEIGHT;min = i;/求最小權(quán)值for (j=i; jmst.length; j+)if (mstj.weightminweight)minweight = mstj.weight;min = j;/尋找當(dāng)前最小權(quán)值的邊的頂點/更新最小權(quán)值/保存當(dāng)前最小權(quán)值邊的終點序號Edge temp = msti;msti = mstmin; mstmin = temp;/交換最小權(quán)值的邊u = msti.dest;/剛并入 U 的頂點/調(diào)整 msti+1及其后元素為權(quán)for (j=i+1; jmst.length; j+
8、)值最小的邊v = mstj.dest;if (adjmatrixuvmstj.weight)/原邊在 V-U 中的終點/若值更小的邊(u,v),則用(u,v)邊替換原邊mstj.weight = adjmatrixuv;mstj.start = u;System.out.pr(nmst 數(shù)組:); for(j=0; j0)String str=;for(i=0; itable.length-1; i+) str += tablei+,;return str+tabletable.length-1+;return null;public void shortestPath(頂點 v 的單源最短
9、路徑v)/以 Dijkstra 算法求帶權(quán)圖中n = this.vertexCount(); dist = newn;/頂點個數(shù)/最短路徑長度/最短路徑的終點的前一個頂path = newn;點 s = newn;/已求出最短路徑的頂點集合,初值全為 0sv = 1;/源點在集合 S 中的標(biāo)記/初始化 dist 和 path 數(shù)組for (i=0; in; i+)disti = this.adjmatrixvi;if (i!=v & distiMAX_WEIGHT) pathi = v;elsepathi = -1;System.out.pr System.out.prSystem.out.p
10、r(ns 數(shù)組+toString(s); (tpath 數(shù)組+toString(path);(tdist 數(shù)組+toString(dist);for (i=1; in; i+)徑,u 在 V-S 集合中mindist=MAX_WEIGHT, u=0;/尋找從 v 到頂點u 的最短路for (j=0; jn; j+)if (sj=0 & distjmindist)u = j;mindist = distj;/if (mindist=MAX_WEIGHT)/若沒有其他最短路徑則算法結(jié)束;此語句對非連通圖是必須的/return;su = 1;/確定一條最短路徑的終點 u 并入集合 Sfor (j=0
11、; jn; j+)/調(diào)整從v 到V-S 中其他頂點的最短路徑及長度if(sj=0 distu+this.adjmatrixujdistj)&this.adjmatrixujMAX_WEIGHT&distj = distu + this.adjmatrixuj;pathj = u;System.out.pr System.out.prSystem.out.pr(ns 數(shù)組+toString(s); (tpath 數(shù)組+toString(path);(tdist 數(shù)組+toString(dist);System.out.prln(n 從頂點+get(v)+到其他頂點的最短路徑如下:); i=v+1
12、;while (i!=v)j=i;String pathstr=; while (pathj!=-1)pathstr = ,+get(j)+pathstr; j=pathj;pathstr = (+get(v)+pathstr+),路徑長度為+disti; System.out.prln(pathstr);i = (i+1)%n;/*未實現(xiàn)public聯(lián)的邊removeVertex(E vertex)/刪除頂點 vertex 及其關(guān)return this.vertexlist.remove(vertex);/刪除順序表中值為vertex 的元素*/public class ShortestPa
13、th短路徑public sic void main(String args)/求帶權(quán)圖的單源最String verti=A,B,C,D,E;/帶權(quán)有向圖 G7 的頂點集合Edge edges= new Edge(0,1,10), new/G7 的邊集合Edge(0,3,30), new Edge(0,4,99),new Edge(1,2,50),new Edge(2,4,10),new Edge(3,2,20), new Edge(3,4,60); AdjMatrixGraph graph = new AdjMatrixGraph(verti,edges);System.out.prln(帶權(quán)
14、有向圖 G7,+graph.toString();graph.shortestPath(0);/從頂點 A 到其他頂點的最短路徑/graph.shortestPath(1);/從頂點B 到其他頂點的最短路徑?三、作品操作說明程序運行結(jié)果如下:帶權(quán)有向圖 G7,頂點集合:A, B, C, D, E鄰接矩陣:0100500203009910600s 數(shù)組1,0,0,0,0s 數(shù)組1,1,0,0,0s 數(shù)組1,1,0,1,0s 數(shù)組1,1,1,1,0s 數(shù)組1,1,1,1,1path 數(shù)組-1,0,-1,0,0 dist 數(shù)組0,10,2147483647,30,99path 數(shù)組-1,0,1,0,0path 數(shù)組-1,0,3,0,3path 數(shù)組-1,0,3,0,2path 數(shù)組-1,0,3,0,2dist 數(shù)組0,10,60,30,99 dist 數(shù)組0,10,50,30,90 dist 數(shù)組0,10,50,30,60di
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025店面合伙經(jīng)營協(xié)議書-咖啡輕食店合作
- 2025年度游戲工作室音效制作人員用工協(xié)議
- 二零二五年度水果店與廣告公司品牌宣傳合作協(xié)議
- 個人車位產(chǎn)權(quán)轉(zhuǎn)讓與車位增值服務(wù)及配套設(shè)施維護(hù)協(xié)議(2025年度)
- 二零二五年度反擔(dān)保人合作協(xié)議:旅游度假區(qū)項目資金安全反擔(dān)保協(xié)議
- 美容院二零二五年度合伙人合作協(xié)議:風(fēng)險管理與合規(guī)經(jīng)營
- 二零二五年度小產(chǎn)權(quán)房屋買賣與智能家居安裝合同
- 二零二五年度新能源行業(yè)定向就業(yè)人才培養(yǎng)合同
- 二零二五年度房屋拆除工程風(fēng)險評估與處理合同
- 二零二五年度文創(chuàng)園區(qū)房東租賃服務(wù)協(xié)議
- 建筑工程安全文明施工標(biāo)準(zhǔn)化圖集(附圖豐富)
- 人教版 美術(shù)二年級上冊 第9課 蜻蜓飛飛 教案
- Unit 1 Travel教案-2023-2024學(xué)年高一下學(xué)期 中職英語高教版(2023修訂版)基礎(chǔ)模塊2
- DB3206T 1083-2024機(jī)關(guān)會議服務(wù)人員操作技術(shù)規(guī)范
- 眼鏡學(xué)智慧樹知到答案2024年溫州醫(yī)科大學(xué)
- 垃圾清運突發(fā)事件應(yīng)急預(yù)案
- 中醫(yī)淋巴排毒
- 提高鉆孔灌注樁成孔質(zhì)量一次驗收合格率
- 住宅小區(qū)工程施工組織設(shè)計范本
- 建筑消防設(shè)施檢測投標(biāo)方案
- 外科打結(jié)法課件
評論
0/150
提交評論