7数据结构与算法——图分析.ppt

7数据结构与算法——图分析

(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcs[i][j]表示vi,vj上的权值。若边不存在,则为无穷。 初值:S={vi} D的初态是:若从v到vi有弧D[i]记录弧上的权值。否则为无穷大。 (2)选择vj使得 vj就是当前求得的从v出发的最短路径的终点,把j并入S。 7.6.1 单源最短路径 算法要点 (3)修改从v出发到集合V-S上任一顶点vk可达的最短路径 D[j]+arcs[j][k]D[k] 则修为: D[k] =D[j]+arcs[j][k] (4)重复(2),(3)共n-1次。 7.6.1 单源最短路径 算法要点 原来的邻接矩阵存储结构: typedef struct ArcCell { // 弧的定义 VRType adj; InfoType *info; // 该弧相关信息的指针 } ArcCell, AdjMatrix[MAX_VERTEX_NUM] [MAX_VERTEX_NUM]; 7.6.1 单源最短路径 存储结构 typedef struct { // 图的定义 VErtexType vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; // 弧的信息 int vexnum, arcnum; // 顶点数,弧数 GraphKind kind; // 图的种类标志 } MGraph; MGraph G; 7.6.1 单源最短路径 存储结构 实用存储结构: typedef struct { // 图的定义 VErtexType vexs[MAX_VERTEX_NUM]; float arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 弧的信息 int vexnum, arcnum; // 顶点数,弧数 } MGraph; MGraph G; 7.6.1 单源最短路径 存储结构 (1)引入一个辅助数组D[],D[i]表示当前所找到的源点到每个终点i的最短路径长度。 最短路径的初值即为有向边的权值: D[i]=G.arcs[v0][i] 引入辅助数组final[],final[i]=1表示顶点i的最短路径已求出,final[i]=0表示顶点i的最短路径还没有求出。 初始状态:S[v0](源点)标志为1,其它为0。 引入数组P[]来记录路径。 7.6.1 单源最短路径 算法概要分析 (2)选择D[]中路径最小值的顶点v(已求出最短路的顶点除外) , v就是当前求得的一条从v出发的最短路径的终点。 修改final[v]=1。 (3)修改未求出最短路径的顶点的最短路径长度,如果:D[v]+G.arcs[v][w]D[w] 则修改D[w]为:D[w]=D[v]+G.arcs[v][w] 同时修改P[w]=v; (4)重复操作(2)、(3)n-1次。求得从v0到图上其余各顶点的最短路径长度递增序列。 7.6.1 单源最短路径 算法概要分析 void ShortestPath_DIJ(MGraph G,int v0, int P,float D) { int i=0,j, v,w,min;bool final[MAX_VERTEX_NUM]; for (v=0; vG.vexnum; ++v) { final[v] = FALSE; D[v] = G.arcs[v0][v]; P[v] = -1; // 设空路径 if (D[v] INFINITY) P[v] = v0; } final[v0] = TRUE; P[v0]=-1 7.6.1 单源最短路

文档评论(0)

1亿VIP精品文档

相关文档