邻接矩阵
文章目錄
- 鄰接矩陣
- 1. 數組(鄰接矩陣)表示法
- 無向圖的鄰接矩陣表示法
- 有向圖的鄰接矩陣表示法
- 有權圖(網)的鄰接矩陣表示法
- 鄰接矩陣的存儲表示
- 2.采用鄰接矩陣表示法創建無向網
鄰接矩陣
1
1
1
1
????
1. 數組(鄰接矩陣)表示法
- 建立一個頂點表(記錄各個頂點信息)和一個鄰接矩陣(表示各個頂點之間關系)。
- 設圖A=(V,E)有n個頂點,則
- 圖的鄰接矩陣是一個二位數組A.arcs[n][n],定義為:
- 設圖A=(V,E)有n個頂點,則
無向圖的鄰接矩陣表示法
分析1:無向圖的鄰接矩陣是對稱的;
分析2:頂點i的度=第i行(列)中1的個數;
特別:完全圖的鄰接矩陣中,對角元素為0,其余1。
有向圖的鄰接矩陣表示法
注:在有向圖的鄰接矩陣中,
第i行含義:以結點vi為尾的弧(即出度邊);
第i列含義:以結點vi為頭的弧(即入度邊)。
分析1:有向圖的鄰接矩陣可能是不對稱的;
分析2:頂點的出度 = 第 i 行元素之和
?????????????頂點的入度 = 第 i 列元素之和
?????????????頂點的度 = 第 i 行元素之和 + 第 i 列元素之和
有權圖(網)的鄰接矩陣表示法
鄰接矩陣的存儲表示
用兩個數組分別存儲頂點表和鄰接矩陣
#define Maxlnt 32767 //表示極大值,即 ∞ #define MVNum 100 //最大頂點數 typedef char VerTexType; //設頂點的數據類型為字符型 typedef int ArcType; //假設邊的權值類型為整型 typedef struct{VerTexType vexs[MVNum]; //頂點表 ArcType arcs[MVNum][MVNum]; //鄰接矩陣int vexnum,arcnum; //圖的當前點數和邊數 }AMGraph; //Adjacency Matrix Graph2.采用鄰接矩陣表示法創建無向網
【算法思想】
(1)輸入總頂點數和總邊數。
(2)依次輸入點的信息存入頂點表中。
(3)初始化鄰接矩陣,使每個權值初始化為極大值。
(4)構造鄰接矩陣。
- 鄰接矩陣——有什么好處?
- 直觀、簡單、好理解
- 方便檢查任意一對頂點間是否存在邊
- 方便找任一頂點的所有“鄰接點”(有邊直接相連的頂點)
- 方便計算任一頂點的“度”(從該點發出的邊數為“出度”,指向該點的邊數為“入度”)
- 無向圖:對應行(或列)非0元素的個數;
- 有向圖:對應行非0元素的個數是“出度”;
對應列非0元素的個數是“入度”。
- 鄰接矩陣——有什么不好?
- 不便于增加和刪除頂點
- 浪費空間——存稀疏圖(點很多而邊很少)有大量無效元素
- 對稠密圖(特別是完成圖)還是很合算的
- 浪費時間——統計稀疏圖中一共有多少條邊
總結
- 上一篇: 第五章· MySQL数据类型
- 下一篇: ndroid分辨率 dpi 屏幕尺寸 对