一、基本概念
1.图的概念
一个图G是指一个二元组(V(G),E(G)),可简记为G=(V,E)。其中
(1)
是非空有限集,称为顶点集,其中元素称为图G的顶点。
(2)E(G)是顶点集V(G)中的无序或有序的元素偶对
组成的集合,即称为边集,其中元素称为边。
2.图G的阶是指图的顶点数|V(G)|,用v来表示;图的边的数目|E(G)|用ε来表示。
3.若一个图的顶点集和边集都是有限图,则称其为有限图。只有一个顶点的图称为平凡图,其他的所有图都称为非平凡图。
4.若图G中的边均为有序偶对(vi,vj),称G为有向图。称边e=(vi,vj)为有向边或弧,称e=(vi,vj)是从vi连接vj,称vi为e的尾,称vj为e的头。
5.若图G中的边均为无序偶对(vi,vj),称G为无向图。称边e=vi vj为无向边,称e连接vi与vj,顶点vi和vj称为e的端点。既有无向边又有有向边的图称为混合图。
6.常用术语
1)边和它的两端点称为互相关联。
2)与同一条边关联的两个端点称为相邻的顶点,与同一个顶点关联的两条边称为相邻的边。
3)端点重合为一点的边称为环,端点不相同的边称为连杆。
4)若一对顶点之间有两条以上的边联结,则这些边称为重边。
5)既没有环也没有重边的图,称为简单图。
6)任意两顶点都相邻的简单图,称为完全图,记为Kv。
7)若V(G)=X∪Y,且X∩Y=∅,且X 中任意两顶点不相邻,Y 中任意两顶点不相邻,则称为二部图或偶图;若X中每一顶点皆与Y 中一切顶点相邻,称为完全二部图或完全偶图,记为Km,n (m=|X|,n=|Y|)。
8) 图K1,n叫做星。
8.若图G=(V(G),E(G))的每一条边e 都赋以一个实数w(e),称w(e)为边e的权,G 连同边上的权称为赋权图。
9.设G=(V,E)和G'=(V',E')是两个图。
1)若V'⊆V,E'⊆E,则称G'为G的一个子图,记G'⊆G。
2)若V'=V,E'⊆E,则称G'是G的生成子图。
3)若V'⊆V,且V'≠∅,以V'为顶点集,以两端点均在V'中的边的全体为边集的图G的子图,称为G的由V'导出的子图,记为G[V']。
4)若E'⊆E,且E'≠∅,以E'为边集,以E'的端点集为顶点集的图G的子图,称为G的由E'导出的子图,记为G[E']。
10.图的矩阵表示
1)邻接矩阵
①对无向图G,其邻接矩阵为A
②对有向图G,其邻接矩阵为A,其中
③对有向赋值图G,其邻接矩阵为A,其中
2)关联矩阵
①对无向图G,其关联矩阵为M,其中
②对有向图G,其关联矩阵为M,其中
11.图的顶点度
1)在无向图G中,与顶点v关联的边的数目(环算两次),称为顶点v的度或次数,记为d(v)或 dG(v)。称度为奇数的顶点为奇点,度为偶数的顶点为偶点。
2)在有向图中,从顶点v引出的边的数目称为顶点v的出度,记为d+(v),从顶点v引入的边的数目称为v的入度,记为d-(v)。称d(v) = d+(v) + d -(v)为顶点v的度或次数。
12.路和连通
1)无向图G的一条途径(或通道或链)是指一个有限非空序列W=v0e1v1e2…ekvk,它的项交替地为顶点和边,使得对1≤i≤k,ei的端点是vi-1与vi,称W是从vo到vk的一条途径,或一条(v0,vk)途径。整数k称为W的长。顶点v0和vk分别称为W的起点和终点,而v1,v2,…,vk-1称为W的内部顶点。
2)若途径W的边互不相同但顶点可重复,则称W为迹或简单链。
3)若途径W的顶点和边均互不相同,则称W为路或路径。一条起点为v0,终点为vk的路称为(v0,vk)路,记为P(v0,vk).
4)途径W中由相继项构成子序列vi e(i+1) v(i+1) … ej vj称为途径W的节。
5)起点与终点重合的途径称为闭途径。
6)起点与终点重合的的路称为圈(或回路),长为k的圈称为k阶圈,记为Ck。
7)若在图G中存在(u,v)路,则称顶点u和v在图G中连通。
8)若在图G中顶点u和v是连通的,则顶点u和v之之间的距离d(u,v)是指图G中最短(u,v)路的长;若没有路连接u和v,则定义为无穷大。
9)图G中任意两点皆连通的图称为连通图。
10)对于有向图G,若W=v0e1v1e2…ekvk,且ei有头vi和vi-1,则W称为有向途径。类似地,可定义有向迹,有向路和有向圈。
13.有很少条边或弧(边的条数|E|远小于|V|²)的图称为稀疏图(sparse graph),反之边的条数|E|接近|V|²,称为稠密图(dense graph)。
二、迪杰斯特拉算法(Dijkstra's Algorithm)
(一)概念
1.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。不能解决带有“负权回路”的图
(二)步骤
1.每次从未标记的节点中选择距离出发点最近的节点,标记,收录到最优路径集合中。
2.计算刚加入节点A的邻近节点B的距离(不包含标记的节点),若(节点A的距离+A到B的边长)<节点B的距离,就更新节点B的距离和前面点
三、弗洛伊德算法(Floyd-Warshall Algorithm)
(一)概念
1.求任意两顶点间的最短路,同样不能解决带有“负权回路”的图。
2.借助P矩阵与D矩阵进行计算,P矩阵用来存放各个顶点之间最小路径的中转点,即前置矩阵。D矩阵用来存放各个点之间的最短距离。
三、最小生成树(Minimum Spanning Tree)
(一)概念
1.连通且不含圈的无向图称为树。常用T表示。树中的边称为树枝。树中度为1的顶点称为树叶。孤立顶点称为平凡树。
(二)算法
1.克鲁斯卡尔算法(Kruskal Algorithm)
适合于求边稀疏的网的最小生成树。将所有边按照权值的大小进行升序排序,然后从小到大一一判断,条件为:如果这个边不会与之前选择的所有边组成回路,就可以作为最小生成树的一部分;反之,舍去。直到具有 n 个顶点的连通网筛选出来 n-1 条边为止。筛选出来的边和所有的顶点构成此连通网的最小生成树。
2.普里姆算法(Prim Algorithm)
普里姆算法在找最小生成树时,将顶点分为两类,一类是在查找的过程中已经包含在树中的(假设为A类),剩下的是另一类(假设为B类)。对于给定的连通网,起始状态全部顶点都归为B类。在找最小生成树时,选定任意一个顶点作为起始点,并将之从B类移至A类;然后找出B类中到 A 类中的顶点之间权值最小的顶点,将之从B类移至A类,如此重复,直到B类中没有顶点为止。所走过的顶点和边就是该连通图的最小生成树。