第六章學習小結

(一)鄰接表和鄰接矩陣算法

圖的存儲結構,有鄰接矩陣表示法和鄰接矩陣表示法兩種。數組

鄰接矩陣經過矩陣來存儲圖的信息,其算法的時間複雜度爲O(n^2);鄰接表經過鏈式存儲結構來存儲圖的信息,其算法的時間複雜度爲O(n+e);由於鄰接矩陣表示法不便於增長和刪除頂點,空間效率低,因此相對於鄰接表而言,鄰接矩陣更適合用於稠密圖,而稀疏圖更適合用於鄰接表。數據結構

採用鄰接矩陣表示法,建立無向網
Status CreateUDN(AMGraph &G)  //G.vexnum:總頂點數;G.arcnum:總邊數;MaxInt:極大值
{
    cin>>G.vexnum>>G.arcnum;  //輸入總頂點數,總邊數 
    
    for(i=0;i<G.vexnum;++i)        
        cin>>G.vexs[i];           //依次輸入點的信息 
    
    for(i=0;i<G.vexnum;++i)       
        for(j=0;j<G.vexnum;++j)
            G.arcs[i][j] = MaxInt; //初始化,權值都置爲極大值MaxInt 
    
    for(k=0;k<G.arcnum;++k)   
    {
        cin>>v1>>v2>>w;
        i=LocateVex(G,v1);j=LocateVex(G,v2); //肯定v1和v2在矩陣中的位置,既頂點數組的下標
        G.arcs[i][j] = w;
        G.arcs[j][i] = G.arcs[i][j]; 
     } 
     return OK;
}
圖的鄰接表存儲方式
#define MVNum 100 //最大頂點數
typedef struct ArcNode //邊結點 
{
    int adjvex;  //該邊所指向的頂點的位置
    struct ArcNode *nextarc; //指向下一條邊的指針
    OtherInfo info; //和邊相關的信息 
 } ArcNode;
 typedef struct VNode
 {
     VERtexType data;
     ArcNode *firstarc;
 }VNode,AdjList[MVNum];
 typedef struct
 {
     ADjList vertics;
     int vexnum, arcnum; //圖當前頂點數和邊數 
 }SLGrapg;

(二)圖的遍歷spa

深度優先搜索(Depth First Search,DFS)遍歷相似於樹的先序遍歷,是樹先序遍歷的推廣。指針

廣度優先搜索(Breadth First Search,BFS)遍歷相似於樹的按層次遍歷的過程。code

(三)最小生成樹blog

圖G的生成樹是:包含G的所有頂點的極小連通子圖。最小生成樹的邊數=圖的頂點數-1。ci

最小生成樹的算法有普里姆算法和克魯斯卡爾算法兩種。class

普里姆算法:時間複雜度O(n^2),適用於稠密圖效率

克魯斯卡爾算法:時間複雜度O(Elog2e),適用於稀疏圖

(四)最短路徑的算法

算法的實現主要的難點在於須要引入輔助的數據結構。

(1)二維數組Path[i][j]:最短路徑上頂點vj的前一頂點的序號。

(2)二維數組D[i][j]:記錄頂點vi和vj之間的最短路徑長度。

相關文章
相關標籤/搜索