图论,是 C++ 里面很重要的一种算法,今天,就让我们一起来了解一下图论吧!
如果对您有帮助,就点个赞吧!
其实很简单,把点用边连起来就可以算是图。
从严格意义上来讲,图是一种数据结构,定义为:graph=(V,E)
。其中,V
是一个非空有限集合,代表顶点(结点),E
代表边的集合。
这里只讲解最常见的邻接表和邻接矩阵。
定义 int
类型数组:G[100][100]
(注:数组大小随结点的个数变化)。
G
i
,
j
G_{i,j}
Gi,j 的值表示从点
i
i
i 到点
j
j
j 的权值,定义如下:
G
i
,
j
=
{
1
或权值
v
i
与
v
j
之间有边或弧
0
或
∞
v
i
与
v
j
之间无边且无弧
G_{i,j}=
上面的
3
3
3 个图对应的邻接矩阵分别如下:
G
(
A
)
=
[
0
1
1
1
1
0
1
1
1
1
0
0
1
1
0
0
]
G
(
B
)
=
[
0
1
1
0
0
1
0
1
0
]
G
(
C
)
=
[
∞
5
8
∞
3
5
∞
2
∞
6
8
2
∞
10
4
∞
∞
10
∞
11
3
6
4
11
∞
]
G(A)=
优点:实现简单,使用方便,且容易获取每个结点的度(有向图是入度和出度),特别是有向图的出度,有手就会。
缺点:对于节点多,边数少的图来说,邻接矩阵存储很浪费空间。
以空间换时间。
图的邻接表存储法,又叫链式存储法。本来是采用链表实现的,但大多情况下只要用数组模拟即可。
优点:随机数据下空间相对较小。
缺点:极限数据浪费空间大。
空间消耗不稳定。
优点:更加的节约空间。
缺点:搜索时需要把所有的边枚举一遍,太浪费时间。
以时间换空间。
优点:更加的节约空间。
缺点:排序时间大。
以时间换空间。
优点:空间消耗少,速度也快。
缺点:暂无。