27图的介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
'''
V(Vertex) 表示顶点集合
E(Edge) 表示边的集合
(v,w)属于 E ,E这条边 就包括 v w 两个顶点的连线。
< v,w > 属于 E ,v 指向 w 的有向边 ,属于E。
不考虑 重边 和 自回路。

G Graph
G(V,E)

邻接矩阵 G[N][N]
[
0 1 1
1 0 0
1 1 0
]
对角线为0 因为没有自回路。

对于无向图,可以省一半的空间。(只存 "下三角区域" 内容)
存放图 在一个长度为 [n (n + 1)] / 2 的1维数组中。

G[i][j] 对应的下标为
( i*(i+1)/2 + j ) #看图可以知道。

网络 中 每条边有权重。
G[i][j] 的值,不再定义为1 ,而定义为 < vi,wj > 的权重即可。

问题:
在无权的这种无向图中,两个结点之间不连接,用 G[N][N] = 0 来表示。
在有向的图中(带权重),怎么表示不相连的 < vi,wj > 呢?

邻接矩阵(优点)
1】直观、
2】方便查看顶点之间是否存在边、
3】方便找任意顶点的"邻接点"。
4】方便计算任意顶点的度。

"度" 是指该点出发的边数,"入度"是指向该点的边数。
对于"无向图"邻接矩阵:行或列的 非0 元素个数 就是该顶点的度。
对于"有向图"邻接矩阵:行 非0 元素的个数是"出度",列 非0 元素的个数是"入度"。

邻接矩阵(缺点)
1】点多边少的 稀疏图 浪费空间,只有堆任意顶点之间都有边的完全图 划算、
2】点多边少的 稀疏图 浪费时间,统计稀疏图边数特别浪费时间。


'''

'''

邻接表:
我们用G[N]为指针数组,对应矩阵每行一个链表,只存非零元素。
G[0] = node1 node3 (表示出了 01、03两条边)
G[1] = node5 node3 node0 node2 (表示出了 15、13、01、12四条边,其中01算重复出现的。)
...
G[N] = ...

邻接表 的表示是不唯一的。
邻接表一定要够稀疏才合算。其优缺点如下:
1】方便找任意顶点的所有"邻接点"
2】节约稀疏图空间
需要 N 个头指针、
(每条边存2遍)2E 个结点, 画一个4顶点5条边的图作相应邻接表,可以很容易理解。
每个结点至少2个域(数组中位置下标、指向下一个结点的指针、网还有权值)。
3】方便计算 "无向图" 任意顶点的度
对 "无向图" 出度 好算,但是 入度 需要哦构造 "逆邻接表"存指向自己的边 来计算,"逆邻接表"相当于在邻接矩阵以列为单位存。
4】不方便检查 任意一对顶点 是否存在边。



'''