




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第二節(jié)圖的存儲結(jié)構(gòu)
當(dāng)前講授
對于具有n個頂點的圖,最常采用的存儲方法有鄰接矩陣存儲方法
與鄰接表存儲方法。
一、鄰接矩陣表示法
1、鄰接矩陣
設(shè)G=(V,E)是具有n個頂點的圖,則G的鄰接矩陣是具有如下
定義的n階方陣:
J1當(dāng),Vj)或Wi,Vp是E(G)的邊
[l]bJ=I0當(dāng)(Vi,Vj)或Wi,Vj>不是E(G)的邊
【例】
1ooA
1io
10ii
1101
1oj
01
1100、
0010
1001
0101
00ooy
1619821A
OOOO6OO
coOO1833
618oo14
OO3314
2.采用鄰接矩陣存儲方法具有以下特點:
①無向圖的鄰接矩陣一定是一個對稱矩陣。因此,按照壓縮存儲
的思想,在具體存放鄰接矩陣時只需存放上(或者下)三角形陣的元
素即可。
②不帶權(quán)的有向圖的鄰接矩陣一般來說是一個稀疏矩陣(特別是
對于稀疏圖),于是可以采用三元組表的方法存儲鄰接矩陣。
③對于無向圖,鄰接矩陣的第i行(或者第i列)非零元素(或者
非8元素)的個數(shù)正好是第i個頂點的度D(Vi)o
(4)對于有向圖,鄰接矩陣的第i行(或者第i歹I」)非零元素(或者
非8元素)的個數(shù)正好是第i個頂點的出度OD(Vi)(或者入度ID
(V.))o
⑤對于無向圖,鄰接矩陣的所有非零元素(或者非8元素)的個數(shù)
正好是邊數(shù)的2倍。
⑥對于有向圖,鄰接矩陣的所有非零元素(或者非8元素)的個數(shù)
正好等于弧數(shù)。
⑦一個圖的鄰接矩陣表示是唯一的。
【真題選解】
(例題?填空題)若無向圖G中有n個頂點m條邊,采用鄰接矩陣
存儲,則該矩陣中非0元素的個數(shù)為O
隱藏答案
【答案】2m
【解析】對于無向圖,鄰接矩陣的所有非零元素的個數(shù)正好是邊數(shù)
的2倍。
3、鄰接矩陣表示的存儲結(jié)構(gòu)定義
#defineMaxVertexNum50〃最
大頂點數(shù)
typedefStruct
{vertexTvpevexs[MaxVertexNum];〃頂
點數(shù)組,類型假定為char型
Adjmstrixarcs[MaxVertexNum][Max\/ertexNum];//
鄰接矩陣,假定為int型
}MGQph;
4、建立一個無向網(wǎng)的算法
【算法描述】
VoidCreateMGraph(MGraph*G,intn,inte)
{〃采用鄰接矩陣表示法構(gòu)造無向網(wǎng)G,r、e表示圖的當(dāng)前頂點
數(shù)和邊數(shù)
inti,j,k,w;
scanf("%d,%d",&n,&e);〃讀
入頂點數(shù)和邊數(shù)
for(i=0;i<n;i++)〃輸
入頂點信息
scanf("%c",&G->vexs[i]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
G->arcs[i][j]=INT_MAX;〃初始
化鄰接矩陣元素為無窮大,一般填32767
for(k=0;k<e;k++)〃讀入
e條邊,建立鄰接矩陣
〃讀入一
條邊的兩端頂點序號i、j及邊上的權(quán)W
{scanf("%d,%d,%d",&i,&j,&w);
G->arcs[i][j]=w;
G->arcs[j][i]=w;〃置矩
陣對稱元素權(quán)值
)
)
算法的時間復(fù)雜度0(n2)
二、鄰接表表示法
1、鄰接表
對于具有n個頂點的圖建立n個線性鏈表。每一個鏈表最前面都分
別設(shè)置一個稱之為頂點表結(jié)點,n個頂點構(gòu)成一個數(shù)組結(jié)構(gòu)。第i個鏈
表中的每一個鏈結(jié)點稱之為邊表結(jié)點。
【例】
頂點表邊表
無向圖無向圖的鄰接表
頂點表入邊表
有向圖的逆鄰接表
2、采用鄰接表存儲方法具有以下特點:
①一個圖的鄰接表表示法不唯一,這是因為鄰接表中各結(jié)點的鏈
接次序取決于建立鄰接表的算法(前插法還是后插法建鏈表)及邊的
輸入次序。
②對于無向圖,若它有n個頂點,e條邊,則其鄰接表中需要
2e+n個結(jié)點。其中有2e個邊表結(jié)點,n個頂點表結(jié)點。邊表結(jié)點的
個數(shù)一定是偶數(shù),為邊數(shù)的2倍。
③對于有向圖,若它有n個頂點,e條邊,則其鄰接表中需要
e+n個結(jié)點。其中有e個邊表結(jié)點,n個頂點表結(jié)點。
④對于無向圖,第i個鏈表中的邊表結(jié)點的數(shù)目是第i個頂點的
度。
⑤對于有向圖,第i個鏈表中的邊表結(jié)點的數(shù)目是第i個頂點的出
度。在其逆鄰接表中,第i個鏈表中的邊表結(jié)點的數(shù)目是第i個頂點的
入度。
3、圖的鄰接表存儲結(jié)構(gòu)定義
#defineMaxVertexNum20
typedefcharVertexType;
typedefstructnode〃邊表結(jié)點類型
{intadjvexj〃頂點的序號
structnode*next;〃指向下一條邊的指
針
}EdgeNode;
typedefstructvnode〃頂點表結(jié)點
{VertexTypevertex;〃頂點域
EdgeNode*link;〃邊表頭指針
}VNode,Adjlist[MaxVertexNum];〃鄰接表
typedefAdjlistALGr■叩h;〃定義為圖類型
4、無向圖鄰接表的建表算法:
voidCreateGraph(ALGraphGL,intn,inte)
{〃n為頂點數(shù),e為圖的邊數(shù)
inti,j,k;EdgeNode*p;
for(i=0;i<n;i++)〃建立頂點表
{GL[i].vertex=getchar();〃讀入頂點信
息
GL[i].link=NULL;〃邊表頭指針
置空
)
for(k=0;k<e;k++)〃采用頭插法
建立每個頂點的鄰接表
{scanf("%d,%d",&i,&j);〃讀入邊
(vi,vj)的頂點序號
p=(EdgeNode*)malloc(sizeof(EdgeNode));
〃生成新的邊表結(jié)
點
p->adjvex=j;〃將鄰接點序號
j賦給新結(jié)點的鄰接點域
p->next=GL[i].link;
GL[i].link=p;〃將新結(jié)點插入
到頂點vi的邊表頭部
p=(EdgeNode*)malloc(sizeof(EdgeNode));
〃生成新的邊表結(jié)點
p->adj.vex=i;〃將鄰接點序號
i賦給新結(jié)點的鄰接點域
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 24498-2025建筑門窗、幕墻用密封膠條
- 戰(zhàn)略合作合同協(xié)議書(經(jīng)典)
- 租賃合同變更及轉(zhuǎn)讓協(xié)議模板
- 建筑承包合同協(xié)議書格式
- 張偉房地產(chǎn)開發(fā)合同糾紛案件解析
- 2024年人教版九年級中考英語現(xiàn)在進(jìn)行時教學(xué)設(shè)計
- 合伙創(chuàng)業(yè)合同書
- 加盟合作合同協(xié)議
- 10《青山處處埋忠骨》教學(xué)設(shè)計-2023-2024學(xué)年統(tǒng)編版語文五年級下冊
- 供水改造工程合同范本-施工專用
- 消防員班長培訓(xùn)課件
- 醫(yī)師資格認(rèn)定申請審核表
- 04干部人事檔案目錄
- (新湘科版)六年級下冊科學(xué)知識點
- MLL基因重排成人急性B淋巴細(xì)胞白血病和急性髓系白血病臨床特征及預(yù)后危險因素分析
- 雅思學(xué)習(xí)證明范本范例案例模板
- 磁共振成像(MRI)基本知識及臨床應(yīng)用
- 產(chǎn)品不良品(PPM)統(tǒng)計表格模板
- 品管圈PDCA提高手衛(wèi)生依從性-手衛(wèi)生依從性品
- 2023年廣州市青年教師初中數(shù)學(xué)解題比賽決賽試卷
- 對折剪紙課件
評論
0/150
提交評論