圖-圖的表示方法


圖的表示法

  • 鄰接矩陣表示法-表示頂點間鄰接關系的矩陣
    • 無向圖的鄰接矩陣

(1)無向圖的鄰接矩陣式對稱矩陣,可以壓縮存儲;有n個結點的無向圖需要的存儲空間為n(n+1)/2

(2)無向圖的中,頂點vi的度是鄰接矩陣中的第i行元素之和

    • 有向圖的鄰接矩陣

  (1)有向圖的鄰接矩陣不一定對稱,有n個頂點的有向圖需要存儲空間為n2

  (2)有向圖中:頂點vi的出度是鄰接矩陣中第i行元素之和,頂點vi的出度是鄰接矩陣中第i列元素之和

    • 網的鄰接矩陣(網是帶權的圖)

    • 鄰接矩陣的數據類型定義
      • 1 #define MaxVertexNum 100    //頂點數目最大值
        2 typedef char VertexType;    //頂點數據類型
        3 typedef int EdgeType;    //帶權圖中邊上權值的數據類型,如果僅表示表示邊存在與否,可以定義為0,1的枚舉類型
        4 typedef struct
        5 {
        6     VertexType Vex[MaxVertexNum];    //頂點表
        7     EdgeType Edge[MaxVertexNum][MaxVertexNum];    //鄰接矩陣邊表
        8     int vexnum, arcnum;    //圖的當前頂點和弧數
        9 }MGraph;
  • 鄰接表表示法
    • 處理
      • 圖中頂點用一個一維數組存儲。頂點數組中,每個數據元素還需要存儲指向第一個鄰接點的指針,以便於查找該結點的邊信息
      • 圖中每個頂點vi的所有鄰接點構成一個線性表,由於鄰接點的個數不定,所以用單鏈表存儲,無向圖中稱為頂點vi的邊表,有向圖則稱為頂點vi作為弧尾的出邊表
    • 無向圖的鄰接表

 

 

    • 有向圖的鄰接表

 

    • 網的鄰接表
      • 對於帶權值的網圖,可以在邊表結點定義中在增加一個weight的數據域,存儲權值即可

    • 鄰接表的數據類型定義
      •  1 #define MaxVertexNum 100 //頂點數目的最大值
         2 typedef char VertexType;
         3 typedef int EdgeType;
         4 typedef struct ArcNode    //邊表結點
         5 {
         6     int adjVex;        //該弧所指向的頂點的位置
         7     struct ArcNode *next;        //指向下一條弧的指針
         8     //infoType info        //帶權圖的權值
         9 }ArcNode;
        10 typedef struct VNode    //頂點表結點
        11 {
        12     VertexType data;    //頂點的信息
        13     ArcNode *first;        //指向第一條依附該頂點的弧的指針
        14 }VNode, AdjList[MaxVertexNum];
        15 typedef struct
        16 {
        17     AdjList    vertices;    //鄰接表
        18     int vernum, arcnum;        //圖的頂點數和弧數
        19 }ALGraph;            //ALGraph是以鄰接表存儲的圖的類型

         

 

 

 

 

 


免責聲明!

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



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