[工学]CH7 图
邻接矩阵是表示顶点之间相邻关系的矩阵。设G=(V,E)是具有n(n>0)个顶点的图,顶点的顺序依次为(v0,v1,…,vn-1),则G的邻接矩阵A是n阶方阵,其定义如下: (1) 如果G是无向图,则:A[i][j]= 1:若(vi,vj)∈E(G) 0:其他 (2) 如果G是有向图,则:A[i][j]= 1:vi,vj∈E(G) 0:其他 (3) 如果G是带权无向图,则: A[i][j]= wij :若vi≠vj且(vi,vj)∈E(G) ∞:其他 (4) 如果G是带权有向图,则: A[i][j]= wij :若vi≠vj且vi,vj∈E(G) ∞:其他 * * 在图的逻辑结构上进行遍历 * 在图的逻辑结构上进行遍历 与存储结构有关 * * * * * * * * * * * * * * * * * * * * * * * * * V0 V1 V4 V2 V3 3 8 25 4 12 20 5 30 10 0 1 2 3 4 0 1 2 3 4 20 1 4 0 12 0 3 2 3 30 0 0 25 8 4 0 1 0 3 10 5 1 2 3 0 8 8 8 8 8 8 8 8 8 8 8 从V0到V4共有三条路径: {V0,V4}, {V0, V1, V3, V4} {V0, V1, V2, V4} 30 23 38 V0 V4 (反证法可证)假设此路径上有一个顶点不在S中,则说明存在一条终点不在S 中而长度比此最短路径还短的路径。因为我们是按路径长度递 增的次序来产生各最短路径的,所以比此最短路径短的所有路 径均已产生,它们的终点必在S中。与假设矛盾,原结论成立。 如图2 一、从源点到其余各顶点的最短路径 迪杰斯特拉(Dijkstra)算法的基本思想: 按带权路径长度递增次序产生最短路径: 首先,设置辅助向量D,每个分量D[i] 记录当前所求得的从源点v到 其余顶点 vi 的最短路径的长度。其初始状态为:若从v到vi 有弧,则D[i]为弧上的权值,否则置D[i]= 。其中D[i]最小 的一条路径(v, vi )必为任何一条从v出发的最短路径。 那么,下一条长度次短的最短路经是哪一条呢?假设该次短路径的 终点是vk,则此路径或者是(v, vk ),或者是(v, vi ,vk )。 一般情况下,假设把V分成两组: (1)S:已求出最短路径的顶点的集合; (2)V-S=T:尚未确定最短路径的顶点集合。 可以证明:下一条最短路经(设其终点为x)或者是弧(v,x),或者 是中间只经过S中的顶点而最后到达顶点x的路径。如图1 8 v2 v1 v4 v3 20 18 10 5 3 此时,S={v1,v2}。 下一条最短路径: 要么是(v1,v3), 要么是(v1,v2,v3)。 图1 图2 狄克斯特拉算法的具体步骤如下: (1) 初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,U中顶点u距离为边上的权(若v与u有边v,u)或∞
原创力文档

文档评论(0)