c語言數據結構學習心得——圖


圖G由頂點集V和邊集E組成,記為G=(V,E)

圖不可為空,一定有頂點集不為空

有向圖:有向邊(弧)的有限集合

無向圖:無向邊的有限集合

連通:頂點V到頂點V'有路徑

連通分量:無向圖中的極大連通子圖(極大:1.頂點足夠多;2.極大連通子圖包含依附這些點的所有邊)

強連通分量:有向圖中的極大強連通子圖

連通的生成樹:包含圖中的全部n個頂點,但只有n-1條邊的極小連通子圖

度:以該頂點為一個端點的邊數目

入度(ID):以頂點為終點的有向邊數目

出度(OD):以頂點為起點的有向邊數目

 

圖的存儲結構

鄰接矩陣(順序存儲)

頂點:用一維數組存儲 邊/弧:用二維數組存儲

#define MaxVertexNum 100                    //頂點數目最大值
typedef char VertexType;                    //頂點的數據類型項,不同情況不一樣
typedef int EdgeType;                       //整數表示權值或者連通性
typedef struct{
   VertexType Vex[MaxVertexNum]; //頂點表
   EdgeType [MaxVertexNum][MaxVertexNum];   //鄰接矩陣
   int vexnum,arcnum;                       //圖的當前頂點數和弧數
}MGraph

鄰接表:存儲的無向圖中查找頂點容易,但是修改邊或者查詢邊需要遍歷鏈表。

 

圖的遍歷

從圖中某一頂點出發,訪遍圖中其余頂點,且使每一個頂點僅被訪問一次。

BFS(廣度優先遍歷):類似於樹的層序遍歷算法

時間復雜度:

鄰接表:每個頂點入隊一次,O(|V|),對於每個頂點,搜索其鄰接點,所以訪問該頂點所有邊,O(|E|),所以總時間復雜度O(|V|+|E|)。

鄰接矩陣:每個頂點入隊一次,O(|V|),對於每個頂點,搜索其鄰接點,所以遍歷矩陣,O(|V|),所以總時間復雜度O(|V|2|)。

DFS(深度優先遍歷):類似於樹的先序遍歷算法。

鄰接表:每個頂點入隊一次,O(|V|),對於每個頂點,搜索其鄰接點,所以訪問該頂點所有邊,O(|E|),所以總時間復雜度O(|V|+|E|)。

鄰接矩陣:每個頂點入隊一次,O(|V|),對於每個頂點,搜索其鄰接點,所以遍歷矩陣,O(|V|),所以總時間復雜度O(|V|2|)。

 

總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM