1.一个连通图的生成树:一个极小连通子图,含有全部顶点和构成一个树的n-1条边。
命题:如果一颗生成树上添加一条边,必定构成一个环。
1)由深度优先遍历得到的生成树称为 深度优先生成树。
2)由广度优先遍历得到的生成树称为 广度优先生成树。
连通图:仅需调用遍历过程一次,从图中任一顶点出发,便可以遍历图中的各个顶点,产生相应的生成树。
非连通图:需要多次调用遍历过程。每个连通分量中的顶点集和遍历时走过的边一起构成一颗生成树。所有连通分量的生成树组成非连通图的生成森林
1)对于带权连通图G(权值均大于0),可能有多棵不同生成树。
2)每颗生成树的所有边的权值之和可能不同。
3)权值之和最小的生成树为最小生成树
一。普里姆(Prim)算法,构造最小生成树。过程:
1)初始化U={v},v到其它顶点的所有边为侯选边;
2)重复一下步骤n-1次,使得其它n-1个顶点被加入U中:
a.从候选码边中挑选 权值最小的边输出, 设该边在V-U中的顶点是k,将k加入U中
b.考察当前V-U中的所有顶点j,修改侯选边;若(j,k)的权值小于原来和顶点k关联的侯选边,则用(k,j)取代后者作为侯选边。
二。克鲁斯卡尔(Kruskal)求带权无向图的最小生成树的构造性算法。
按 权值的递增 次序选择合适的边来构造最小生成树的方法
1)置U的初值等于V(包含G中的全部顶点),TE的初值为空集(即图T中每一个顶点都构成一个连通分量)表示最小生成树的边集。
2)将图G中的边按权值从小到大的顺序依次选取:
a.若选取的边未使生成树T形成回路,则加入TE;
b.否则舍弃,知道TE中包含n-1条边为止。
三,最短路径 , 从一个顶点到其余各顶点的最短路径
单源最短路径问题:Dijkstra算法
迪克斯特拉算法过程:
1)初始化:S只包含源点即S={v},v的最短路径为0(本身)。U包含除v外的其它顶点,U中顶点i距离为边上的权值(若v与i有边<v,i>)或无穷(若i不是v的出边邻接点)
2)从U中选取一个距离v最小的顶点u,把u加入S 中(该选定的距离就是v-》u的最短路径长度)。
3)以u为新的考虑的中间点,修改U中各顶点j的最短路径长度:若从原点v->j (j属于U)的最短路径长度(经过顶点u)比原来最短路径长度(不经过顶点u)短,则修改顶点j的最短路径长度。
**
拓扑排序
设G=(V,E)是一个具有n个顶点的有向图,V中顶点序列v1,v2…vn称为一个拓扑序列,当且仅当该顶点序列满足下列条件:
若<i,j>是图中的边(或从顶点i->j有一条路径):
则在拓扑序列中顶点i必须排在顶点j之前
在一个有向图中找一个拓扑序列的过程称为拓扑排序。
课程之间的先后关系可用有向图表示:
拓扑排序步骤:
1)从有向图中选择一个没有前驱的顶点并且输出它。
2)从图中删去该顶点,并且删去从该顶点发出的全部有向边。
3)重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。
注意:都是从入度为零的点开始的,出度少的开始
aebcd
abecd
abced
关键路径
1)时间的最早开始和最迟开始时间
事件v的最早开始时间:规定源点事件的最早开始时间为0,定义图中任一事件v的最早开始时间ee(v)等于x,y,z到v所有路径长度的最大值
事件v的最迟开始时间:定义在不影响整个工程进度的前提下,事件v必须发生的时间成为v的最迟开始时间,记作le(v)。le(v)应等于ee(y)与v到会点的最长路径长度之差。