北航軟件工程專業考研991數據結構總結:
六、圖
1.圖的基本概念、名詞術語;
2.圖的鄰接矩陣存儲方法和鄰接表(含逆鄰接表)存儲方法的構造原理及特點;
3.圖的深度優先搜索與廣度優先搜索;
4.最小(代價)生成樹、最短路徑、AOV網與拓撲排序的基本概念。
1.圖的基本概念、名詞術語;
基本概念:
定義:圖是非空有窮頂點的集合 + 頂點之間的關係 構成 G(V,E),V是頂點的集合,E是邊或弧的集合
分類:
無向圖:(vi, vj)屬於E,必有(vj,vi)屬於E,頂點的前後順序無關
有向圖:<vi, vj>不同於<vj, vi>
網絡:與邊有關的數據稱爲權,邊上帶權的圖叫做網絡
名詞術語:
頂點的度:依附於頂點vi的邊數稱爲度 TD(vi)
有向圖:
入度:以頂點vi作爲終止點的邊數稱爲入度ID(vi)
出度:以頂點vi作爲起始點的邊數稱爲出度OD(vi)
結論:
①、邊數E = 各個頂點的度的總和/2
②、具有n個頂點的無向圖最多有 n(n-1)/2 條邊 每個頂點可以向其他n-1個頂點發出一條邊,n個頂點總邊數 n(n-1),根據相互性,除以2
③、具有n個頂點的有向圖最多有 n(n-1) 條邊
完全圖:邊數達到最大
稠密圖:邊數達到或者接近最大邊數的圖
稀疏圖:否則。。。
路徑:頂點vx到vy之間有路徑P(vx, vy)的充分必要條件爲:存在頂點序列 vx, vi1, vi2, ... vim, vy,並且序列中相鄰頂點構造的偶對爲圖的一條邊
迴路(環):出發點與終止點相同的路徑稱爲環,迴路
簡單路徑:頂點序列中頂點不重複出現的路徑叫做簡單路徑
路徑長度:
不帶權的:經過的邊的數目
帶權:經過的邊的權之和
子圖:g(v,e) 是 G(V, E)的子圖,有 v 屬於 V,e屬於E,則g爲G的子圖
圖的連通:
無向圖的連通:頂點vi到vj有路徑,則vi與vj是連通的,圖中任意兩個頂點都是連通的,則圖是連通的
極大連通子圖就是連通分量,連通圖的極大連通子圖就是自己,非連通圖的連通分量不是唯一的
有向圖的連通:頂點vi到vj有路徑並且vj到vi也有路徑,則vi與vj是連通的,圖中任意兩個頂點都是連通的,則圖是強連通的
極大強連通子圖叫做強連通分量,不是強連通圖也可以有相連通分量
生成樹:
連通圖G(V,E)有n個頂點,包含n個頂點,n-1條邊的極小連通子圖叫做G的一個生成樹
特點:
生成樹不含有迴路,如果給生成樹加一條邊,則必然產生迴路,減少一條邊,則必然造成不連通
2、圖的鄰接矩陣存儲方法和鄰接表(含逆鄰接表)存儲方法的構造原理及特點
鄰接矩陣
1)、定義一個一維數組V[0..n-1]存放所有頂點信息;
2)、定義一個二維數組E[0..n01][0..n-1],存放所有頂點之間的關係,該矩陣就是鄰接矩陣
E[i][j]:值爲1,代表頂點vi,vj之間有邊,值爲0,代表vi,vj之間無邊
對於帶權的圖,有E[i][j]:wij表示邊的權值,無窮大,表示無邊
特點:
①、無向圖的鄰接矩陣一定是對稱矩陣 因爲vi,vj有邊,那麼vj,vi也有邊
②、不帶權的有向圖的鄰接矩陣一般是稀疏矩陣
③、無向圖的第 i 行或者i列 的非0或者非無窮大的元素個數就是頂點 vi 的度
④、有向圖中第 i 行非0或者非無窮的元素個數代表頂點vi的出度
第 i 列非0或者非無窮的元素個數代表頂點vi的入度
鄰接表:
構造:
1)、每個鏈表設置一個頭結點,用來存放一個頂點的數據信息,稱之爲頂點結點
其構造爲 vertex link
vertex存放頂點數據信息,link指向鏈表中的第一個結點地址
n個頭結點之間是一維數組
2)、第i個鏈表中的每一個鏈結點(稱之爲邊結點)表示以第i個頂點爲出發點的一條邊,
其構造爲 adjvex weight next
其中,next指向下一條邊結點,weight爲帶權邊的權值,不帶權的無此數據域,adjvex表示以第i個結點爲出發點的邊的另一端的結點在數組中的位置
特點:
①、無向圖中第i個鏈表中鏈結點的個數就是頂點i的度
②、有向圖中第i個鏈表中鏈結點的個數就是頂點i的出度
③、圖中有n個頂點,e條邊,則 無向圖需要n個頭結點,2e個邊結點
有向圖需要n個頭結點,e個邊結點
無向圖邊結點總數一定是偶數,邊結點個數爲奇數的一定是有向圖
逆鄰接表:第i個鏈表的邊界點表示第i個頂點爲終止點的邊
#define MAXV 最大頂點個數
typedef struct edge{
int adjvex;
int weight;
struct edge *next;
}ELink;
typedef struct ver{
verType vertex;
ELink *link;
}VLink;
VLink G[MAXV]
3、圖的深度優先搜索和廣度優先搜索
深度優先搜索
從某個指定的頂點v出發,先訪問v結點,然後從v頂點的某個未被訪問的鄰接點出發,繼續進行深度優先搜索,直到與v連通的所有頂點都被訪問
如果此時還有未被訪問的結點,則從另一個未被訪問的結點出發,繼續上述,直到遍歷所有結點
算法:
爲了標記某一時刻圖中頂點的訪問情況,需要一個一維數組visited[0..n-1],值爲1表示被訪問過了,值爲0表示未被訪問
算法分析:
n個頂點,e條邊,採用鄰接表存儲,時間複雜度O(n+e),採用鄰接矩陣存儲,時間複雜度O(n^2)
深度優先 中序遍歷類似
廣度優先搜索
從某個指定的頂點v出發,先訪問v結點,然後依次訪問頂點v未被訪問過的鏈結點,再從該結點出發,按照同樣的規則訪問它們的鏈結點,直到與v連通的頂點都被訪問
如果此時還有未被訪問的結點,則從另一個未被訪問的結點出發,繼續上述,直到遍歷所有結點
廣度優先 按層遍歷
4、最小(代價)生成樹,最短路徑,AVO網與拓撲排序的基本概念
最小代價樹:帶權連通圖中,總的權值之和最小的帶權生成樹稱爲最小生成樹,也叫最小代價樹,最小花費樹
原則:
1)、只能利用圖中的邊構造;
2)、只能使用且僅能使用圖中的n-1條邊來構造;
3)、不能使用圖中產生迴路的邊
最短路徑:
AOV網 有前驅和後繼
拓撲排序:先從沒有入度的結點開始
刪除該結點及所有邊
繼續進行,直到爲空,或者不存在沒有入度的結點(有迴路)