【07】图的遍历和图的应用

遍历定义:从已给的连通图中某一顶点出发,沿着一些边(弧),访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。
图的遍历策略:广度优先遍历、深度优先遍历。
图的深度优先遍历
思想:
访问起始点 v;
若v的第1个邻接点没访问过,深度遍历此邻接点;
若当前邻接点已访问过,再找v的第2个邻接点重新遍历。
从图中某个顶点v0出发,访问顶点v0。访问顶点v0的第一个邻接点,然后以该邻接点为新的顶点,访问该顶点的邻接点。
重复执行以上操作,直到当前顶点没有邻接点为止。返回到上一个已经访问过但还有未被访问的邻接点的顶点,按照以上步骤继续访问该顶点的其他未被访问的邻接点。
依次类推,直到图中所有的顶点都被访问过。

图的广度优先遍历
思想:
在访问了起始点v之后,依次访问 v的邻接点;
然后再依次(顺序)访问这些点(下一层)中未被访问过的邻接点;
直到所有顶点都被访问过为止。
广度优先搜索是一种分层的搜索过程,每向前走一步可能访问一批顶点,不像深度优先搜索那样有回退的情况。
因此,广度优先搜索不是一个递归的过程,其算法也不是递归的。

最小生成树
生成树的定义
一个连通图 (无问图)的生成树是一个极小连通子图:它含有图中全部顶点n和足以构成一棵树的n-1条边。
(1)生成树中“极小”的含义是指连通所有顶点,并且边数最少。
(2)一棵有n个顶点的生成树有且仅有n-1条边。且不构成回路。
最小生成树
对于带权的图,其生成树的边也带权,在这些带权的生成树中必有一棵边的权值之和最小的生成树,这棵生成树就是最小生成树。
构造最小生成树
构造原则:
(1) 尽可能选取权值最小的边,但不能构成回路。
(2) 选择n-1条边构成最小生成树。

1.普利姆(Prim)算法
算法思路:
       从连通网络 N = { V, E }中的某一顶点 u0 出发, 选择与它关联的具有最小权值的边(u0, v),将其顶点加入到生成树顶点集合U中。
        以后每一步从一个顶点在 U 中, 而另一个顶点不在 U 中的各条边中选择权值最小的边(u, v),把它的顶点加入到集合 U 中(不能有回路)。如此继续下去, 直到网络中的所有顶点都加入到生成树顶点集合 U 中为止。
2.克鲁斯卡尔(Kruskal)算法
算法思路:
        设无向连通带权图G=(V,E),其中V为结点的集合,E为边的集合。设带权图G的最小生成树T由结点集合和边的集合构成T=(U,TE),其初值为T=(V,{}),既初始时最小生成树T只由带权图G中结点集合组成,各结点之间没有一条边。
        然后,对G中的边权值按照从小到大依次选取。每次选取权最小的边(vi,vj),若(vi,vj)加入TE后形成回路,则舍弃。否则将该边并入TE。
        如此进行下去,直到TE中包含n-1条边为止,此时的TE就是G的—棵最小生成树。
Kruskal算法特点:将边归并,适于求稀疏网的最小生成树。
Prime算法特点: 将顶点归并,与边数无关,适于稠密网。

AOV网和拓扑排序

  1. AOV网
          在一个工程中,有些活动必须在其他相关活动完成之后才能开始,即一个活动的开始是以它的所有前序活动的结束为先决条件的, 为了形象地反映整个工程中各个活动之间的先后关系,可以用一个有向图来表示。
          若以图中的顶点来表示活动,有向边表示活动之间的优先关系,即有向边的起点活动是终点活动的前序活动,只有当起点活动完成之后,其终点活动才能进行。通常, 把这种顶点表示活动,边表示活动间先后关系的有向图称为顶点表示活动的网( Activity on Vertex network, AOV)。
  2. 拓扑排序
          对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若图G存在边<u,v>,则u在线性序列中出现在v之前。
    一个有向图找到一个拓扑排序序列的过程为:
    (1)在有向图中选择一个没有前驱(入度为0)的顶点输出;
    (2) 从图中删除该顶点和所有从它出发的边,得到一个新的有向图;
    (3) 重复1,2操作,直到全部顶点都输出。

猜你喜欢

转载自blog.csdn.net/The_Handsome_Sir/article/details/106558089