圖論——圖的基本性質與表示
圖的基本性質
頂點(vertex)
上圖中黑色的帶數字的點就是頂點,表示某個事物或物件。由於圖的術語沒有標準化,因此,稱頂點為點、節點、結點、端點等都是可以的。叫什麼無所謂,具體代指什麼才是關鍵。
邊(edge)
上圖中頂點之間藍色的線條就是邊,表示頂點之間的邏輯關係,事物與事物之間的關係。
有向/無向圖(Directed Graph/ Undirected Graph)
有向圖和無向圖,兩者的區別在於,有向圖中的邊是有方向性的。(可以把無向圖視為“雙向”的有向圖,構造無向圖用的就是這種方法)
一般到底是有向圖還是無向圖要根據實際情況判斷,比如在A、B兩點之間的一條路,那一定是個無向圖。
權重(weight)
邊的權重(或者稱為權值、開銷、長度等),即每條邊都有與之對應的值。例如當頂點代表某些地點時,兩個頂點間邊的權重可以為兩點的距離。
連通圖/連通分量(connected graph/connected component)
如果在圖G中,任意2個頂點之間都存在路徑,那麼稱G為連通圖(注意是任意兩個頂點)。下圖不是一個連通圖,但如果把下圖看為兩個圖,就是兩個連通圖。
連通分量也叫最(極)大連通子圖,把上圖看為一個整體,它不是一個連通圖,但它有多個連通子圖,0,1,2,3,4頂點構成的子圖就是該圖的最大連通子圖。
注意:對於連通圖來說,它的最大連通子圖就是其本身。
圖的表示
鄰接矩陣
用二維陣列直接儲存。鄰接矩陣版本的圖論演算法實現起來也更容易,因為不存在鄰接表的邊界問題,用於定點數目較小的情況。
鄰接表
儲存示意圖:
有向圖 digraph 表示
無向圖 graph 表示(可理解為雙向有向圖)
struct ENode {
int dis, to;//權重、指向
ENode* next = NULL;
void push(int to, int dis) {
ENode* p = new ENode;
p->to = to; p->dis = dis;
p->next = next;
next = p;
}
}head[100];
完整測試:
#include <iostream>
#include <fstream>
using namespace std;
typedef long long LL;
struct ENode {
int dis, to;//權重、指向
ENode* next = NULL;
void push(int to, int dis) {
ENode* p = new ENode;
p->to = to; p->dis = dis;
p->next = next;
next = p;
}
}*head;
int main() {
#ifdef LOCAL
fstream cin("data.in");
#endif // LOCAL
/*
5 8
1 3 4
2 4 3
4 5 6
1 5 7
3 5 4
3 4 3
2 5 6
4 1 7
*/
int n, m; //n個定點,m條邊
cin >> n >> m;
head = new ENode[n + 1];
for (int i = 0; i < m; i++) {
int from, to, dis;
cin >> from >> to >> dis;
head[from].push(to, dis);
//無向圖
//head[to].push(from,dis);
}
for (int i = 1; i <= n; i++) {
cout << i;
ENode* p = head[i].next;
while (p) {
if (p)cout << "-->";
cout << p->to;
p = p->next;
}
cout << endl;
}
return 0;
}
相關文章
- 圖論之有權圖「帶權圖的表示」圖論
- 基礎圖論圖論
- 圖論基礎圖論
- 不定積分的基本性質
- ¡Hola Euler! 圖資料庫的理論基礎:圖論資料庫圖論
- 圖論之有權圖「帶權圖的表示及相鄰節點迭代器」圖論
- 圖論與圖學習(二):圖演算法圖論演算法
- 圖論入門基礎圖論
- 圖論(一)--基礎概念圖論
- 【知識點】圖與圖論入門圖論
- 文章 | 吃透 <正規表示式>(理論+多圖示例)
- [全程建模]類圖與時序圖作用的對比討論時序圖
- 圖論圖論
- 圖論(三)--各種基礎圖演算法總結圖論演算法
- 「技美之路 第07篇」圖形 2.2 模型與材質基礎模型
- 圖靈機與計算理論圖靈
- 架構製圖:工具與方法論架構
- 譜圖論:Laplacian運算元及其譜性質圖論
- 圖論演算法遍歷基礎圖論演算法
- 圖論基礎(自認為很全)圖論
- 【圖論】樹的重心圖論
- 演算法基礎第三章搜尋與圖論演算法圖論
- 【模板】圖論圖論
- 模板 - 圖論圖論
- 圖論板子圖論
- 資料結構:圖的表示資料結構
- 演算法與資料結構之圖的表示與遍歷演算法資料結構
- [譯] 基於 Python 的圖論和網路分析Python圖論
- 圖論-有向圖縮點圖論
- 圖論的一些建圖小技巧圖論
- 圖論(Graph Theory)圖論Graph Theory
- CQNK圖論 1圖論
- 【圖論】尤拉圖圖論
- 圖論題單圖論
- 圖論筆記圖論筆記
- 圖論總結圖論
- 片 - 圖論 - 1圖論
- 圖論連通性圖論