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