图是一种常见的抽象模型,在计算机专业中的应用尤其广泛。数据结构和算法是计算机专业的必修课程,而图则是数据结构和算法课上的必修内容,图论问题是算法竞赛的常客,图的重要性可见一斑。其它算法学的再好,不会图论的话,那永远也称不上是算法高手。那么问题就来了,怎么学习图算法呢。
要学习图算法,首先咱得有个图不是,所以学习图算法的第一关就这么来了–怎样能创建/存储图呢?
一.基本概念
再讲具体的存储之前,先讲一下图的基本概念
图可以描述现实世界的许多状态,由结点和结点之间的连线组成,图的相同与否仅与结点和边的数量有关和连线的具体长度和结点的位置无关。比如:
上面的两个图就表示了同一个图形。当然,这里说的相同与否是在同一类型下的图的比较。图可以分成很多种类。
1.可以通过边有无方向把图分成有向图和无向图和混合图
(1)每一条边都是无向边的图称为无向图,上面图中的两个图都是无向图。
(2)每一条边都是有向边的图称为有向图,下面图中的图就是有向图。
(3)如果图中的一些边是有向边,一些边是无向边,则称这个图是混合图。
2.除了看边的方向,还可以通过看边是否有权把边分成无权图和加权图。
(1)无权图:顾名思义,边上没有权值的图就叫无权图,上述所有的图都属于无权图。
(2)加权图:在无权图的基础上给每条边加上权值,就称为加权图。如下图所示,边上的数值就是权值。
3.将以上两点结合可得多种图
(1)无向无权图,边没有权值,没有方向
(2)有向无权图,边有方向,无权值
(3)加权无向图,边有权值,但没有方向
(4)加权有向图,边有权值,有方向
这些图就是1. 2. 示例图的结合,这里就不在特意放图描述了
4.度的概念和相关定理
在一个图中,和一个结点相关联的边数就称为该结点的度数。据此有以下定理。
(1)每个图中,结点的度数总和等于边数的两倍。
(2)在任何图中,度数为奇数的结点必定是偶数个。
5.子图和补图
子图:设图G=,如果有图G‘=,E‘>,且E’⊆E,V‘⊆V,则称G’为G的子图。如果G的子图包含G的所有结点,则称该子图为G的生成子图。
补图:设图G‘=,E‘>是图G=的子图,若给定另外一个图G’‘