版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
“鄰接矩陣表示的帶權有向圖”演示程序班級:信息1102姓名:賈孟濤
========實習報告十四“鄰接矩陣表示的帶權有向圖(網)”演示程序==========
(一)、程序的功能和特點
該程序可以建立有向圖的帶權鄰接矩陣,能夠對建立的鄰接矩陣進行添加頂點,添加邊和刪除頂點,刪除邊的操作,并能顯示輸出鄰接矩陣。該程序的特點是采納java面對對象語言,對邊,頂點和鄰接矩陣用類進行封裝。采納鏈式存儲結構。
(二)、程序的算法設計
算法一:“插入一個頂點”算法:
1.
規(guī)律結構:線性結構。
存儲結構:挨次存儲與鏈式存儲結合。
2.
文字說明:
創(chuàng)建新結點,找到結點L位置,在L后插入新結點。
3.
文字說明:
(1).首先推斷頂點表是否滿。
(2).若滿則插入失敗,放回false。
(3).頂點表若不滿,創(chuàng)建新頂點,將新頂點加入頂點表。
(4).插入頂點勝利,返回true。
4.
//插入一個頂點
publicintInsertVertex(charvertex){
if(IsGraphFull())return-1;//插入失敗
//頂點表增加一個元素
VerticesList=vertex;
//鄰接矩陣增加一行一列
for(intj=0;j<=CurrentVertices;j++){
Edge=MaxValue;
Edge=MaxValue;
}
Edge=0;
CurrentVertices++;
returnCurrentVertices;//插入位置
}
算法二:“插入一條邊”算法:
1.
規(guī)律結構:線性結構。
存儲結構:鏈式存儲結構。
3.
文字說明:
創(chuàng)建新邊結點,再將新創(chuàng)建的邊結點插入圖中。
4.
文字說明:
(1).首先推斷插入邊上的兩個頂點編號是否越界。
if(v1CurrentVertices-1)returnfalse;if(v2CurrentVertices-1)returnfalse;(2).假如越界則插入失敗,返回false。
(3).否則創(chuàng)建新邊結點
(4).再將新創(chuàng)建的邊結點插入圖中
(5).插入勝利返回true。
4.
//插入一個邊
publicbooleanInsertEdge(intv1,intv2,doubleweight){if(v1CurrentVertices-1)
returnfalse;//出錯
if(v2CurrentVertices-1)
returnfalse;
Edge=weight;//網,有向邊
returntrue;
}
(三)、程序中類的設計
“Graph”類:
1.
規(guī)律結構:網狀結構。
存儲結構:挨次存儲與鏈式存儲結合。
2.
staticintMaxEdges=50;
staticintMaxVertices=10;
staticdoubleMaxValue=9999.9;//無窮大
//存放頂點的數(shù)組
privatecharVerticesList=newchar;
//鄰接矩陣(存放兩個頂點權值)
privatedoubleEdge=newdouble;
privateintCurrentEdges;//現(xiàn)有邊數(shù)
privateintCurrentVertices;//現(xiàn)有頂點數(shù)
//構造函數(shù):建立空的鄰接矩陣
3.
publicGraph():為定義的構造函數(shù),建立空的鄰接矩陣。
publicintFindVertex(charvertex):查找指定的頂點的序號
publicbooleanIsGraphEmpty():推斷圖是否為空。
publicbooleanIsGraphFull():推斷圖是否為滿。
publiccharGetValue(inti):按頂點序號返回頂點數(shù)據。
publicintNumberOfVertices():返回圖的頂點數(shù)。
publicintNumberOfEdges():返回圖的邊數(shù)。
publicdoubleGetWeight(intv1,intv2):取得一條邊的權值。
publicintGetFirstNeighbor(intv):取得第一個鄰接點的序號
publicintInsertVertex(charvertex):插入一個頂點。
publicbooleanRemoveVertex(intv):刪除一個頂點。
publicbooleanInsertEdge(intv1,intv2,doubleweight):插入一條邊。
publicbooleanRemoveEdge(intv1,intv2):刪除一條邊。
publicvoiddisplay():顯示鄰接矩陣。
4.
//“鄰接矩陣”類
classGraph{
staticintMaxEdges=50;
staticintMaxVertices=10;
staticdoubleMaxValue=9999.9;//無窮大
//存放頂點的數(shù)組
privatecharVerticesList=newchar;
//鄰接矩陣(存放兩個頂點權值)
privatedoubleEdge=newdouble;
privateintCurrentEdges;//現(xiàn)有邊數(shù)
privateintCurrentVertices;//現(xiàn)有頂點數(shù)
//構造函數(shù):建立空的鄰接矩陣
publicGraph(){
for(inti=0;i<MaxVertices;i++)
for(intj=0;j<MaxVertices;j++)
if(i==j)
Edge=0;//對角線
else//非對角線上無窮大
Edge=MaxValue;
CurrentEdges=0;//現(xiàn)有邊數(shù)
CurrentVertices=0;//現(xiàn)有頂點數(shù)
}
//查找指定的頂點的序號
publicintFindVertex(charvertex){
//在頂點數(shù)組里面查找
for(inti=0;iCurrentVertices-1)return-1.0;//用-1表示出錯
if(v2CurrentVertices-1)return-1.0;
returnEdge;
}
//取得第一個鄰接點的序號
publicintGetFirstNeighbor(intv){
if(vCurrentVertices-1)
return-1;//用-1表示出錯
//鄰接矩陣的行號和列號是兩個鄰接點的序號
for(intcol=0;col0
return-1;//無鄰接點
}
//插入一個頂點
publicintInsertVertex(charvertex){
if(IsGraphFull())return-1;//插入失敗
//頂點表增加一個元素
VerticesList=vertex;
//鄰接矩陣增加一行一列
for(intj=0;jCurrentVertices-1)
returnfalse;//出錯
if(v2CurrentVertices-1)
returnfalse;
Edge=weight;//網,有向邊
returntrue;
}
//刪除一個頂點
publicbooleanRemoveVertex(intv){
if(vCurrentVertices-1)
returnfalse;//出錯
//修改頂點表
for(inti=v+1;i0//第v行
for(inti=0;i0//第v列
//掩蓋第v行
intj;
for(inti=v+1;iCurrentVertices-1)
returnfalse;//用-1表示出錯
if(v2CurrentVertices-1)
returnfalse;
if(v1==v2)returnfalse;
Edge=MaxValue;//網,無路徑
returntrue;
}
//打印鄰接矩陣
publicvoiddisplay(){
inti,j;
System.out.println("頂點表");
for(i=0;i<CurrentVertices;i++)
System.out.print(VerticesList+"");
System.out.println('\n'+"鄰接矩陣");
for(i=0;i<CurrentVertices;i++){
for(j=0;j<CurrentVertices;j++)
if(Edge==MaxValue)
System.out.print('@'+"");
else
System.out.print(Edge+"");
System.out.println();
}
}
//主函數(shù)
publicstaticvoidmain(Stringargs){
GraphG=newGraph();//鄰接矩陣
//預備有向圖(網)數(shù)據
charc={'A','B','C','D','E','F'};//頂點
intv={//弧
{0,1},{0,3},{1,2},{2,3},{4,5},
{1,3},{2,4},{3,5},{4,3},{2,5}
};
doublee={2.3,3.6,6.5,2.5,1.7,
0.8,7.2,9.1,5.2,1.3};//權
//插入頂點
for(inti=0;i<6;i++)
G.InsertVertex(c);
//插入弧
for(inti=0;i<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 食品安全追溯消費者信任反饋建立
- 專業(yè)基礎-房地產經紀人《專業(yè)基礎》真題匯編3
- 農場半年度工作匯報
- 統(tǒng)編版五年級語文上冊寒假作業(yè)(十三)有答案
- 二零二五版共有產權房轉讓協(xié)議書3篇
- 二零二五年智能大棚土地承包合作協(xié)議范本3篇
- 宿州航空職業(yè)學院《英語專業(yè)前沿課程》2023-2024學年第一學期期末試卷
- 二零二五版公共安全防范承包合同3篇
- 二零二五年食品包裝設計及委托加工合同
- 蘇教版初一英語試卷單選題100道及答案
- 春季餐飲營銷策劃
- 企業(yè)會計機構的職責(2篇)
- 《疥瘡的防治及治療》課件
- Unit4 What can you do Part B read and write (說課稿)-2024-2025學年人教PEP版英語五年級上冊
- 2025年MEMS傳感器行業(yè)深度分析報告
- 《線控底盤技術》2024年課程標準(含課程思政設計)
- 學校對口幫扶計劃
- 倉庫倉儲安全管理培訓課件模板
- 風力發(fā)電場運行維護手冊
- 河道旅游開發(fā)合同
- 情人合同范例
評論
0/150
提交評論