前言:
上一周一直在忙着准备阿里巴巴的笔试,花了大量时间复习以前的内容,不过感觉好像没有起到什么作用,现在不想这些问题了,先专心学习数据结构。现在终于来到了本科时遇到最头疼的图论了。本科时就只会在纸上画一画算法,现在我要亲手实现它们。
我的github:
我实现的代码全部贴在我的github中,欢迎大家去参观。
https://github.com/YinWenAtBIT
图论算法:
若干定义:
一、图的概念
简单讲,一个图是由一些点和这些点之间的连线组成的。严格意义讲,图是一种数据结构,定义为:graph=(V,E),V是点(称为“顶点”)的非空有限集合,E是线(称为“边”)的集合,边一般用(vx,vy)表示,其中vx,vy属于V。
二、无向图和有向图
如果边是没有方向的,称此图为“无向图”,用一对圆括号表示无向边,显然(vx,vy)和(vy,vx)是两条等价的边,
如果边是有方向(带箭头)的,则称此图为“有向图”,用一对尖括号表示有向边,边<v1,v2>。把边<Vx,Vy>中Vx称为起点,Vy称为终点。显然此时边<vx,vy>与边<vy,vx>是不同的两条边。有向图中的边又称为弧,起点称为弧头,终点称为弧尾。
一个图可以表示为:V={v1,v2,v3},E={<v1,v2>,<v1,v3>,<v2,v3>,<v3,v2>} 如果两个顶点U、V之间有一条边相连,则称U、V这两个顶点是关联的。
三、带权图
一个图中的两顶点间不仅是关联的,而且在边上还标明了数量关系,这种数量关系可能是距离、费用、时间、电阻等等,这些数值称为相应边的权。边上带有权的图称为带权图,也称为网(络)。
四、阶
图中顶点的个数称为图的阶。
五、度
图中与某个顶点相关联的边的数目,称为该顶点的度。度为奇数的顶点称为奇点,度为偶数的顶点称为偶点。
在有向图中,把以顶点V为终点的边的数目称为顶点V的入度,把以顶点U为起点的边的数目称为顶点U的出度,出度为0的顶点称为终端顶点。
定理1:无向图中所有顶点的度之和等于边数的2倍,有向图中的所有顶点的入度之和等于所有顶点的出度之和。
定理2:任意一个无向图一定有偶数个(或0个)奇点。
六、完全图
若无向图中的任意两个顶点之间都存在着一条边,有向图中的任意两个顶点之间都存在着方向相反的两条边,则称此图为完全图。n阶完全有向图含有n*(n-1)条边,n阶完全无向图含有 n*(n-1)/2条边,当一个图接近完全图时,称为稠密图;相反,当一个图的边很少时,称为稀疏图。
七、子图
设有两个图G =(V,E)