数据结构学习笔记------图
主要掌握深度優(yōu)先搜索與廣度優(yōu)先搜索的程序設(shè)計(jì)
掌握?qǐng)D的基本概念及基本性質(zhì)(度、路徑長(zhǎng)度、回路、路徑等)、圖的存儲(chǔ)結(jié)構(gòu)及其特性。
存儲(chǔ)結(jié)構(gòu)之間的轉(zhuǎn)化、基于存儲(chǔ)結(jié)構(gòu)上的遍歷操作和各種應(yīng)用
(拓?fù)渑判?#xff1a;AOV網(wǎng)
最小生成樹:Prim算法、Kruskal算法
最短路徑:Dijkstra算法、Floyd算法
關(guān)鍵路徑: AOE網(wǎng)
)等。
重點(diǎn)掌握其基本思想和實(shí)現(xiàn)步驟,而算法的具體實(shí)現(xiàn)則不重要
結(jié)合圖的實(shí)例考查算法的具體執(zhí)行過(guò)程,
必須學(xué)會(huì)對(duì)給定的圖手工模擬各個(gè)算法的執(zhí)行過(guò)程。
還需掌握對(duì)于給定的模型建立相應(yīng)的圖去解決問(wèn)題的方法
圖的定義:
圖G由頂點(diǎn)集V和邊集E組成, 記為G=(V, E),
V(G) 表示圖G中頂點(diǎn)的有限非空集,若V={V1,V2,…,Vn},用|V|表示圖G中頂點(diǎn)的個(gè)數(shù),也稱為圖G的階
E(G) 表示圖G中頂點(diǎn)之間的關(guān)系(邊)集合,E={(u,v)|u∈V,v∈V},用|E|表示圖G中邊的條數(shù)
完全圖(簡(jiǎn)單完全圖)
無(wú)向完全圖: 如果任意兩個(gè)頂點(diǎn)之間都存在邊;含有n個(gè)頂點(diǎn)的無(wú)向完全圖有n(n-1)/2條邊
有向完全圖: 如果任意兩個(gè)頂點(diǎn)之間都存在方向相反的兩條弧; 含有n個(gè)頂點(diǎn)的有向完全圖有n(n-1)條有向邊
頂點(diǎn)的度、入度和出度:
圖中每個(gè)頂點(diǎn)的度定義為以該頂點(diǎn)為一個(gè)端點(diǎn)的數(shù)目
對(duì)于有向圖: 頂點(diǎn)v的度分為入度和出度,頂點(diǎn)v的度等于其入度和出度之和
邊的權(quán)和網(wǎng)
在一個(gè)圖中,每條邊都可以標(biāo)上具有某種含義的數(shù)值,該數(shù)值稱為該邊的權(quán)值、
這種邊上帶有權(quán)值的圖稱為帶權(quán)圖,也稱做網(wǎng)。
圖的存儲(chǔ)結(jié)構(gòu):
數(shù)組表示法(鄰接矩陣):有向圖和無(wú)向圖的順序存儲(chǔ)
鄰接表(Adjacency List):有向圖和無(wú)向圖的鏈?zhǔn)酱鎯?chǔ)
十字鏈表(Orthogonal List):是有向圖的另一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
鄰接多重表(Adjacency Multilist):是無(wú)向圖的另一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。
圖的基本操作:
(獨(dú)立于圖的存儲(chǔ)結(jié)構(gòu), 不同的存儲(chǔ)方式,操作算法的具體實(shí)現(xiàn)會(huì)有著不同的性能)
考慮不同的存儲(chǔ)方式,具體算法的實(shí)現(xiàn),以及采用何種存儲(chǔ)方式的算法效率會(huì)更高
Adjacent(G, x, y); 判斷圖G是否存在邊<x, y>或(x, y)
Neighbors(G, x); 列出圖G中與結(jié)點(diǎn)x鄰接的邊
InsertVertex(G, x); 在圖G中插入頂點(diǎn)x
DeleteVertex(G, x); 從圖G中刪除頂點(diǎn)x
AddEdge(G, x, y); 如果無(wú)向邊(x, y) 或有向邊<x, y>不存在,則向圖G中添加該邊
RemoveEdge(G, x, y); 如果無(wú)向邊(x, y) 或有向邊<x, y>存在,則從圖G中刪除該邊
FirstNeighbot(G, x); 求圖G中頂點(diǎn)x的第一個(gè)鄰接點(diǎn),若有則返回頂點(diǎn)號(hào)。
若x沒(méi)有鄰接點(diǎn)或圖中不存在x,則返回-1
NextNeighbor(G, x, y); 假設(shè)圖G中頂點(diǎn)y是頂點(diǎn)x的一個(gè)鄰接點(diǎn),返回除y之外頂點(diǎn)x的
下一個(gè)鄰接點(diǎn)a的頂點(diǎn)號(hào),若y是x的最后一個(gè)鄰接點(diǎn),則返回-1
Get_edge_value(G, x, y);獲取圖G中邊(x, y)或<x, y>對(duì)應(yīng)的權(quán)值
Set_edge_value(G, x, y, v);設(shè)置圖G中邊(x, y)或<x, y>對(duì)應(yīng)的權(quán)值為v
圖的遍歷算算法 按照某種方式訪問(wèn)圖中每一個(gè)頂點(diǎn)且僅訪問(wèn)一次。
(包括深度優(yōu)先遍歷和廣度優(yōu)先遍歷)
DFS的具體實(shí)現(xiàn):
基本概念: 連通分量, 強(qiáng)連通分量
G(V,E) : V—頂點(diǎn)的有窮非空集合,E—頂點(diǎn)之間的一條邊
連通分量: 在無(wú)向圖中,如果兩個(gè)頂點(diǎn)間可以互相到達(dá)(可以是通過(guò)一定路徑間接到達(dá)),
那么就稱這兩個(gè)頂點(diǎn)連通。 如果圖G(V,E)的任意兩個(gè)頂點(diǎn)都連通,則稱圖G為連通圖;
否則,稱G為非連通圖,且稱其中的極大連通子圖為連通分量。
強(qiáng)連通分量: 在有向圖中,如果兩個(gè)頂點(diǎn)可以各自通過(guò)一條有向路徑到達(dá)另一個(gè)頂點(diǎn),
就稱這兩個(gè)頂點(diǎn)強(qiáng)連通。如果圖G(V,E)的任意兩個(gè)頂點(diǎn)都強(qiáng)連通,則稱圖G為強(qiáng)連通圖;
否則,稱圖G為非強(qiáng)連通圖,且稱其中的極大強(qiáng)連通子圖為強(qiáng)連通分量。
具體實(shí)現(xiàn)參考
總結(jié)
以上是生活随笔為你收集整理的数据结构学习笔记------图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: React学习笔记——redux里中间件
- 下一篇: 欧拉角速度与角速度的关系推导——欧拉运动