數據結構之圖

北航軟件工程專業考研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網 有前驅和後繼
拓撲排序:先從沒有入度的結點開始
          刪除該結點及所有邊
          繼續進行,直到爲空,或者不存在沒有入度的結點(有迴路)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章