图是表示一些事物或者状态的关系的表达方法。由于许多问题都可以归约为图的问题,所以我们创建了很多跟图相关的算法。因此,在程序设计竞赛中有很多需要直接对图进行处理或者间接用图来解决的问题。
1、图是什么?
图由顶点和边组成。顶点代表对象。在示意图中,我们使用点或圆来标志。边表示的是两个对象的连接关系。在示意图中,我们使用连接两顶点之间的线段来表示。顶点的集合是V,边的集合是E的图,记为G = (V,E),连接两点u和v的边用 e = (u,v) 来表示。
图的种类:
图大体上分为两种,边没有指向性的图叫做无向图,边具有指向性的叫做有向图。表示朋友关系的图和路线图是无向图。表示数值大小关系的图,流程图等是有向图。我们可以给边赋予各种各样的属性,比较具有代表性的有权值。边上带有权值的图叫做带权图。在不同问题中,权值可以代表距离、时间以及价格等不同的属性。
2、无向图的术语:
两个顶点之间如果有边连接,那么就视为两个顶点相邻。相邻顶点的序列称为路径。起点和终点重合的路径叫做圈。任意两点之间都有路径连接的图叫做连通图,顶点连接的边数叫做这个顶点的度。
没有圈的连通图叫做树,没有圈的非连通图叫做森林。一棵树的边数恰好是顶点数-1,反之,边数等于顶点数-1的连通图就是一棵树。
如果在树上选择一个顶点作为根,就可以把根提到最上面,而离根越远的顶点越往下安排其位置。这样的树叫做有根树。不过,对于无根树,有时选择适当的顶点作为根使之变成有根树,可以使问题得到简化。如果把有根树看作家谱图,则可以在顶点之间建立父子关系。也可以认为这是给边加上了方向。
3、有向图的术语:
顶点的出度和入度:指的就是和该顶点相关联的边数,从外部指向该顶点的边数称为入度,从该顶点指向外部的边数称为出度。没有圈的有向图叫做DAG。例如,让我们用顶点表示整数,n能整出m时,从n向m连一条边的图,这就构成一个DAG。在DAG中我们可以给顶点标记一个先后顺序:对于每个顶点我们给它一个编号,第i号顶点叫做vi,那么存在从顶点vi到顶点vj的边时,就有