


版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、作品要求編寫求帶權(quán)圖的單源最短路徑程序。二、學(xué)生作品分析1、代碼分析代碼分析如下:public class AdjMatrixGraph extends AbstractGraph類,繼承抽象圖類/鄰接矩陣表示的圖protected SeqList vertexlist;/順序表圖的頂點(diǎn)集合protectedprivate final adjmatrix;MAX_WEIGHT =/圖的鄰接矩陣eger.MAX_VALUE; /最大權(quán)值(表示無(wú)窮大)/privateedgeCount;/邊數(shù)?public AdjMatrixGraph(n)/構(gòu)造方法,n 指定最多頂點(diǎ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) /以頂點(diǎn)集合和邊集合構(gòu)造一個(gè)圖this(verti.length);for (i=0; iverti.length; i+)insertV
3、ertex(vertii);/一個(gè)頂點(diǎn)for (j=0; jedges.length; j+)insertEdge(edgesj);/一條邊public AdjMatrixGraph(SeqList list, Edge edges) /以頂點(diǎn)集合和邊集合構(gòu)造一個(gè)圖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()/獲得圖的頂點(diǎn)集合和鄰接矩陣String str= 頂點(diǎn)集合:+vertexlist.toString()+n;str += 鄰接矩陣:n;n = vertexCount();/edgeCount+條邊 n;/頂點(diǎn)數(shù)for (i=0; in; i+)for(j=0; j=0 & i=0 & j=0 & vn
5、)this.vertexlist.remove(v);/刪除順序表的第 i 個(gè)元素,頂點(diǎn)數(shù)已減一for (i=v; in-1; i+)for (j=0; jn; j+)this.adjmatrixij = this.adjmatrixi+1j;/元素向前一行移動(dòng)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)圖最小生成樹(shù)的/返回最小生成樹(shù)相應(yīng)的圖對(duì)象Edge mst = new EdgevertexCount()-1;/n 個(gè)頂點(diǎn)最小生成樹(shù)有n-1條邊f(xié)or (i=0; imst.length; i+)發(fā)構(gòu)造最小生成樹(shù)/初始化 mst 數(shù)組,從頂點(diǎn) v0 出msti = new Edge(0, i+1, adjmatrix0i+1);/保存從頂點(diǎn) v0 到其他各頂點(diǎn)的邊的權(quán)System.out.pr(mst 數(shù)組初值:); for(j=0; jmst.length; j+)System.out.pr(mstj.toString();/顯示 mst 數(shù)組的變化過(guò)程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)值的邊的頂點(diǎn)/更新最小權(quán)值/保存當(dāng)前最小權(quán)值邊的終點(diǎn)序號(hào)Edge temp = msti;msti = mstmin; mstmin = temp;/交換最小權(quán)值的邊u = msti.dest;/剛并入 U 的頂點(diǎn)/調(diào)整 msti+1及其后元素為權(quán)for (j=i+1; jmst.length; j+
8、)值最小的邊v = mstj.dest;if (adjmatrixuvmstj.weight)/原邊在 V-U 中的終點(diǎn)/若值更小的邊(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(頂點(diǎn) v 的單源最短
9、路徑v)/以 Dijkstra 算法求帶權(quán)圖中n = this.vertexCount(); dist = newn;/頂點(diǎn)個(gè)數(shù)/最短路徑長(zhǎng)度/最短路徑的終點(diǎn)的前一個(gè)頂path = newn;點(diǎn) s = newn;/已求出最短路徑的頂點(diǎn)集合,初值全為 0sv = 1;/源點(diǎn)在集合 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 到頂點(diǎn)u 的最短路for (j=0; jn; j+)if (sj=0 & distjmindist)u = j;mindist = distj;/if (mindist=MAX_WEIGHT)/若沒(méi)有其他最短路徑則算法結(jié)束;此語(yǔ)句對(duì)非連通圖是必須的/return;su = 1;/確定一條最短路徑的終點(diǎn) u 并入集合 Sfor (j=0
11、; jn; j+)/調(diào)整從v 到V-S 中其他頂點(diǎn)的最短路徑及長(zhǎng)度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 從頂點(diǎn)+get(v)+到其他頂點(diǎn)的最短路徑如下:); i=v+1
12、;while (i!=v)j=i;String pathstr=; while (pathj!=-1)pathstr = ,+get(j)+pathstr; j=pathj;pathstr = (+get(v)+pathstr+),路徑長(zhǎng)度為+disti; System.out.prln(pathstr);i = (i+1)%n;/*未實(shí)現(xiàn)public聯(lián)的邊removeVertex(E vertex)/刪除頂點(diǎn) 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 的頂點(diǎn)集合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);/從頂點(diǎn) A 到其他頂點(diǎn)的最短路徑/graph.shortestPath(1);/從頂點(diǎn)B 到其他頂點(diǎn)的最短路徑?三、作品操作說(shuō)明程序運(yùn)行結(jié)果如下:帶權(quán)有向圖 G7,頂點(diǎn)集合: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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南大版一年級(jí)心理健康第14課《我愛(ài)你們》課件
- 7.2《走向未來(lái)》-課件- -2024-2025學(xué)年統(tǒng)編版道德與法治九年級(jí)下冊(cè)
- 2025屆太白縣四下數(shù)學(xué)期末達(dá)標(biāo)檢測(cè)試題含解析
- 青島市李滄區(qū)2025年六年級(jí)下學(xué)期5月模擬預(yù)測(cè)數(shù)學(xué)試題含解析
- 武漢科技大學(xué)《能源法》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東工業(yè)大學(xué)《西方音樂(lè)史與名作欣賞Ⅱ》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南機(jī)電職業(yè)技術(shù)學(xué)院《花鳥(niǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 淘寶運(yùn)營(yíng)提成合同范本
- 高效解析藥物在人體內(nèi)作用的光譜技術(shù)研究與應(yīng)用趨勢(shì)
- 石家莊理工職業(yè)學(xué)院《化工原理2》2023-2024學(xué)年第二學(xué)期期末試卷
- Unit 1 Travel教案-2023-2024學(xué)年高一下學(xué)期 中職英語(yǔ)高教版(2023修訂版)基礎(chǔ)模塊2
- DB3206T 1083-2024機(jī)關(guān)會(huì)議服務(wù)人員操作技術(shù)規(guī)范
- 眼鏡學(xué)智慧樹(shù)知到答案2024年溫州醫(yī)科大學(xué)
- 垃圾清運(yùn)突發(fā)事件應(yīng)急預(yù)案
- 中醫(yī)淋巴排毒
- 提高鉆孔灌注樁成孔質(zhì)量一次驗(yàn)收合格率
- 住宅小區(qū)工程施工組織設(shè)計(jì)范本
- 建筑消防設(shè)施檢測(cè)投標(biāo)方案
- 外科打結(jié)法課件
- 【女性勞動(dòng)力就業(yè)歧視問(wèn)題探究11000字(論文)】
- 2024年江蘇農(nóng)牧科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)含答案
評(píng)論
0/150
提交評(píng)論