版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《數(shù)據(jù)結(jié)構(gòu)(C++版)》
葉核亞
機(jī)械工業(yè)出版社
0
《數(shù)據(jù)結(jié)構(gòu)(C++版)》
■第1章緒論IIII‘I
■第2章線性表
■第3章排序
■第4章串盤■播0c
■第5章棧與隊(duì)列
■第6章數(shù)組和廣義表
■第7章樹和二叉樹
■第8章查找?
/第9章圖
■第10章綜合應(yīng)用設(shè)計(jì)
第9章圖
9.1圖的基本知識
9.2圖的存儲結(jié)構(gòu)
9.3圖的遍歷
9.4鄰接矩陣圖類
9.5最小代價(jià)生成樹
9.6最短路徑
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
圖的基本知識
-JI----
■9L1圖的定義
?9.L2結(jié)點(diǎn)的度
■9.L3子圖
?9.L4路徑、回路及連通性
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.1.1圖的定義
?圖(graph)是由結(jié)點(diǎn)集合及結(jié)點(diǎn)間的關(guān)系集合組成
的一種數(shù)據(jù)結(jié)構(gòu)。圖中的結(jié)點(diǎn)又稱為頂點(diǎn),結(jié)點(diǎn)之
間的關(guān)系稱為邊(edge)。一個(gè)圖6己作
?其中,呢結(jié)點(diǎn)確有限集合,£是邊的有限集合。即
V={x\x^某個(gè)數(shù)據(jù)元素集合}
昆{(“外區(qū)片4或良{〈XV〉因廣。
?其中,(”必表示從結(jié)點(diǎn)姓11小勺一條雙向通路,即(“外
沒有方向;〈xM表示從結(jié)點(diǎn)加勺一條單向通路,
即〈xM是有方向的。
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
圖結(jié)構(gòu)
(a)哥尼斯堡七橋,無向圖G](c)有向圖G3
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
1.無向圖Gi
?&)={/,B,CQ
&Gi)={(CQ,(GQ,(4),(4。),(40,(CH,
(3)}
2.有向圖G3
g)={4BfG
&?)={〈A@,〈耳力〉,⑷。,〈GO}
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
3.完全圖
(a)有向完全圖占
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
4.帶權(quán)圖
5.相鄰結(jié)點(diǎn)
(a)帶權(quán)的無向圖q
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.1.2結(jié)點(diǎn)的度
1.度、入度、出度
①圖中與結(jié)點(diǎn)環(huán)目關(guān)聯(lián)的邊的數(shù)目稱為結(jié)點(diǎn)的
度(degree),記作TD(D。
2.度與邊的關(guān)系
nn
Z【D"z)=ZOD“z.)=e
1〃i=\i=\
"笆TD(匕)
nnn
2i=\ZTD(匕)=ZID(匕)+ZOD(匕)=2e
Z=1Z=1Z=1
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
、.9.L3子圖
-JI------------
i.子圖、真子圖
(Al)(A2)(A3)(BI)(B2)(B3)(B4)
(a)Gi的部分其子圖(b)(八的部分其子圖
2.生成子圖
①如果G是曲子圖,且%%稱圖G是設(shè)勺生成子
圖。
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.1.4路徑、回路及連通性
1.路徑、路徑長度、回路
2.有根的圖、圖的根
3.連通圖
4.強(qiáng)連通圖
(b)強(qiáng)連通的有向圖
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.2圖的存儲結(jié)構(gòu)
?921鄰接矩陣
■9.2.2鄰接表
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
、9.2,1鄰接矩陣
■JI---------------------
i.鄰接矩陣的定義
2.鄰接矩陣與結(jié)點(diǎn)的[1若(匕,I)eE或<匕#/>eE
若(匕,V/)eE或<匕,V/〉氏E
(a)無向圖1010100
0110011
二
10120000
11101010
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
3,帶權(quán)圖的鄰接矩陣
w(vpvy)若匕wV/且(匕,匕)e£或<V.,vj>GE
)=〈s若%wV/且(vz.,Vj)g£或<匕,V/>任E
0若匕二v
、“J
05oc200
5068oo「045
A4=oo6037A5=602
283093oo0
0000790
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.2,2鄰接表
i.無向圖的鄰接表
datanext
datanext
1A
匕也V4
2也匕?V3---------AV4A
3匕?曠4A
4V4
V1AV2---------V3A
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
2.有向圖的鄰接表
V4A
(a)出邊表(b)入邊表
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.3圖的遍歷
?9.31深度優(yōu)先遍歷
■9.3.2廣度優(yōu)先遍歷
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
49?3.1深度優(yōu)先遍歷
(a)從頂點(diǎn)為出發(fā),一種可能的訪問序列為:{匕,也,立,匕}(b)從頂點(diǎn)v出發(fā),一種可能的訪問序列為{為,0,匕,叱}
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
49?3.2廣度優(yōu)先遍歷
①
V
v
(a)從頂點(diǎn)叫出發(fā),一種可能的訪問序列為:{?,為,匕,4)(b)從頂點(diǎn)],4出發(fā),一種可能的訪問序列為{h,Vl,V3,V2}
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.4鄰接矩陣圖類
1.聲明帶權(quán)值的邊為結(jié)構(gòu)體
structEdgeNodel〃帶權(quán)值的邊
intinit;〃邊的起點(diǎn)
intend;〃邊的終點(diǎn)
intweight;〃邊的權(quán)值
);
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
2.聲明鄰接矩陣圖類
#include<iostream.h>
classGraphl〃鄰接矩陣圖類
(
private:
intvisited[IVIaxSize];〃訪問標(biāo)記數(shù)組
voidunvisited();〃設(shè)置未訪問標(biāo)記
voiddepthfs(intk);〃從結(jié)點(diǎn)k開始的深度優(yōu)先遍歷
voidbreadthfs(intk);〃從結(jié)點(diǎn)k開始的廣度優(yōu)先遍歷
public:
charvertex[MaxSize];〃圖的結(jié)點(diǎn)集合,MaxSize為最大結(jié)點(diǎn)數(shù)
intmat[MaxSize][IVIaxSize];〃圖的鄰接矩陣
intvertCount;〃圖的結(jié)點(diǎn)數(shù)
intedgeCount;〃圖的邊數(shù)
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
3,構(gòu)造函數(shù),初始化一個(gè)圖
Graphl::Graph1()〃初始化圖的結(jié)點(diǎn)集合和鄰接矩陣
(
■nti,j;
for(i=0;i<MaxSize;i++)〃初始化圖的結(jié)點(diǎn)集合
vertex[i]='
for(i=0;i<MaxSize;i++)〃初始化圖的鄰接矩陣
for(j=0;j<MaxSize;j++)
if(i==j)
mat[i]U]=O;〃數(shù)據(jù)元素權(quán)值為0
else
mat[i][j]=IVIaxWeight;〃權(quán)值為無窮大
vertCount=0;〃當(dāng)前結(jié)點(diǎn)數(shù)為0
edgeCount=0;〃當(dāng)前邊數(shù)為0
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
4.以結(jié)點(diǎn)集和邊集構(gòu)造一個(gè)圖
voidGraphl::createGraph(intn,charvert[],intm,EdgeNode1edge[])
〃以結(jié)點(diǎn)集合和邊集合構(gòu)造一個(gè)圖
vertCount=n;〃圖的結(jié)點(diǎn)個(gè)數(shù)
inti,j,k;
for(i=0;i<n;i++)〃初始結(jié)點(diǎn)加入結(jié)點(diǎn)集合
vertex[i]=vert[i];
edgeCount=m;〃圖的邊數(shù)
for(k=0;k<m;k++)〃初始邊值加入鄰接矩陣
(
i=edge[k].init;〃邊的起點(diǎn)
j=edge[k].end;〃邊的終點(diǎn)
mat[i][j]=edge[k].weight;〃邊的權(quán)值
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
5.輸出圖的結(jié)點(diǎn)集合和
鄰接矩陣
ostream&operator<<(ostream&out,Graph1&g1)
(〃輸出圖的結(jié)點(diǎn)集合和鄰接矩陣
coutvv”圖的結(jié)點(diǎn)集合為{";
intij;
for(i=0;i<g1.vertCount-1;i++)
cout<<g1.vertex[i]<<",
cout<<g1.vertex[i]<<,,}"<<endl;
coutvv”圖的令B接矩陣為"vVendl;
for(i=0;i<g1.vertCount;i++)
(
for(j=0;j<g1.vertCount;j++)
if(g1.mat[i][j]==MaxWeight)〃權(quán)值為無窮大時(shí)
cout<<,,oo\tM;
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
6.圖的深度優(yōu)先遍歷
voidGraphl::unvisited()〃設(shè)置未訪問標(biāo)記
(
for(inti=0;i<vertCount;i++)
visited[i]=O;
voidGraphl::depthfs(intk)〃從結(jié)點(diǎn)k開始的深度優(yōu)先遍歷
(
inti=k,j=O;〃i下標(biāo)從0開始
cout<<vertex[i]<<"〃訪問結(jié)點(diǎn)
visited[i]=1;〃設(shè)置訪問標(biāo)記
while(j<vertCount)〃查找與k相鄰的其他結(jié)點(diǎn)
if(i!=j&amat[i][j]>0&&mat[i][j]<IVIaxWeight&&
visited[j]==O)
depthfs(j);〃遞歸
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
7.圖的廣度優(yōu)先遍歷
typedefintdataType;〃抽象數(shù)據(jù)類型dataType定義為int
#include"Queuel.h"〃順序循環(huán)隊(duì)列類
圖的廣度優(yōu)先遍歷算法中,同樣需要使用成員變量visited數(shù)組。算法實(shí)現(xiàn)如下:
voidGraph1::breadthfs(intk)〃從結(jié)點(diǎn)k開始的廣度優(yōu)先遍歷
〃卜為起始結(jié)點(diǎn)下標(biāo)
Queuelq1(vertCount);〃設(shè)置空隊(duì)列
inti=k;
cout<<vertex[i]<<"〃訪問起始結(jié)點(diǎn)
visited[i]=1;〃設(shè)置訪問標(biāo)記
q1.enQueue(i);〃訪問過的結(jié)點(diǎn)k入隊(duì)
while(!q1.isEmpty())〃隊(duì)列不空時(shí)
(
i=q1.deQueue();〃出隊(duì),i是結(jié)點(diǎn)K的數(shù)組下標(biāo)
intj=0;
〃本-t-k匕人口"n甘Z+hZdr上T
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
例9-1創(chuàng)建鄰接矩陣圖類對象
」L并遍歷圖
constintMaxSize=10;〃定義最大結(jié)點(diǎn)數(shù)
constintMaxWeight=9999;〃定義權(quán)值為無窮大
#include"Graphl.h"〃鄰接矩陣圖類
voidmain()
(
charvert口H'ABCDE”;
EdgeNodeledge1[]={{0,1,1},{0,3,1},比向圖G6的邊集合
[1,0,1},{1,2,1},{1,3,1},
(2,1,1},{2,4,1},
(3,0,1},{3,1,1},
(4,2,1}};
Graphlg1,g2;
g1.createGraph(5,vert,10,edge1);
cout<<g1;
〃質(zhì)11月J爾由小1百午
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.5最小代價(jià)生成樹
?9?51樹與圖
?9.5.2生成樹
■9.5.3最小代價(jià)生成樹
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
4951樹與圖
(a)樹(b)去掉一邊成森林,非連通圖(c)加上一邊就不是樹,而是有回路的圖
圖9-11樹、森林與圖
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
例9-2以樹結(jié)構(gòu)描述測試假幣的稱
重策略。
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
952生成樹
i.生成樹的定義
①如果圖說無向圖G的生成子圖且說樹,則圖廠
稱為圖G的生成樹。
(a)無向圖Gf(b)從D出發(fā)的深度優(yōu)先生成樹(c)從C出發(fā)的廣度優(yōu)先生成樹
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
2.生成森林
3.帶權(quán)圖的生成樹
(C)廣度優(yōu)先生成樹
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
9.5.3最小代價(jià)生成樹
設(shè)G是一個(gè)連通的帶權(quán)圖,叱3為邊e上的
權(quán),何麗生成樹,那么加各邊權(quán)之
和為
例7)=Z例>)
e^T
上式稱為生成樹陰勺權(quán),也稱為生成樹的代
價(jià)(cost)o權(quán)最小的生成樹稱為最小
生成樹或最小代價(jià)生成樹。
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
⑴最小代價(jià)生成樹
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
2.普里姆算法
(e)選擇與/關(guān)聯(lián)的權(quán)值最小的邊加入⑴最小代價(jià)生成樹
《數(shù)據(jù)結(jié)構(gòu)(C++版)》葉核亞
£?6最短路徑
1.單源最短路徑
源點(diǎn)一約、占八、、路徑路徑長度最短路徑
(匕,匕)2/
匕
31,匕,畛)12
(匕
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國無糖型魔芋麥芽粉行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年麥味地黃口服液項(xiàng)目投資價(jià)值分析報(bào)告
- 個(gè)人形象塑造與職場禮儀
- 2024至2030年中國全塑型運(yùn)動地板行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國仿真砂巖茶幾行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024年高溫?zé)繇?xiàng)目可行性研究報(bào)告
- 2024年自行車中軸碗項(xiàng)目可行性研究報(bào)告
- 2024年磨砂PC薄膜項(xiàng)目可行性研究報(bào)告
- 2024年中國線性電源變壓器市場調(diào)查研究報(bào)告
- 2024年中國磨砂勺子市場調(diào)查研究報(bào)告
- 【MOOC】城市生態(tài)學(xué)-華東師范大學(xué) 中國大學(xué)慕課MOOC答案
- 紀(jì)念抗日救亡一二九運(yùn)動弘揚(yáng)愛國精神宣傳課件
- 期末試題-2024-2025學(xué)年六年級上冊語文統(tǒng)編版
- 【MOOC】寄生人體的惡魔-醫(yī)學(xué)寄生蟲學(xué)-南方醫(yī)科大學(xué) 中國大學(xué)慕課MOOC答案
- 國家開放大學(xué)2024年12月《思想道德與法治試卷2-版本1》大作業(yè)參考答案
- 大學(xué)生心理健康(上海交通大學(xué))知到智慧樹章節(jié)答案
- 海水的性質(zhì)【知識精研】高三地理一輪復(fù)習(xí)
- 學(xué)前兒童科學(xué)教育與活動指導(dǎo)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 《課堂管理方法與技巧》課件
- 2025人教版九年級英語全冊知識點(diǎn)清單
- 交通運(yùn)輸行業(yè)員工安置方案
評論
0/150
提交評論