- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.8 两点之间的 最短路径问题 求从某个源点到其余各点的最短路径 每一对顶点之间的最短路径 1 2 3 4 5 10 50 20 60 10 30 100 源点 中间顶点 终点 长度 1 2 10 1 4 30 1 4 3 50 1 4, 3 5 60 依最短路径的长度递增的次序求得各条路径,则当前正在生成的最短路径上除终点以外,其余顶点的最短路径均以生成。 求从源点到其余各点的最短路径的算法的基本思想: 依最短路径的长度递增的次序求得各条路径 源点 v1 … 假设最短路径长度递增的次序是v1,v2…vn。源点是v0。 v2 在这条路径上,必定只含一条弧v0,v1,并且这条弧的权值最小。 下一条路径长度次短的最短路径的特点: 路径长度最短的最短路径的特点: 它只可能有两种情况:或者是直接从源点到该点(只含一条弧); 或者是从源点经过顶点v1,再到达该顶点(由两条弧组成)。 其余最短路径的特点: 再下一条路径长度次短的最短路径的特点: 它可能有三种情况:或者是直接从源点到该点(只含一条弧); 或者是从源点经过顶点v1,再到达该顶点(由两条弧组成);或者是从源点经过顶点v2,再到达该顶点。 它或者是直接从源点到该点(只含一条弧); 或者是从源点经过已求得最短路径的顶点,再到达该顶点。 求最短路径的迪杰斯特拉算法: 一般情况下, D[k] = 源点到顶点 k 的弧上的权值 或者 = 源点到其它顶点的最短路径长度 + 其它顶点到顶点 k 的弧上的权值。 设置辅助数组D,其中每个分量D[k] 表示 当前所求得的从源点到其余各顶点 k 的最短路径。 1)在所有从源点出发的弧中选取一条权值最小的弧,即为第一条最短路径。 2)修改其它各顶点的D[k]值。 假设求得最短路径的顶点为u, 若 D[u]+G.arcs[u][k]D[k] 则将 D[k] 改为 D[u]+G.arcs[u][k]。 V0和k之间存在弧 V0和k之间不存在弧 其中的最小值即为最短路径的长度。 求每一对顶点之间的最短路径 弗洛伊德算法的基本思想是: 从 vi 到 vj 的所有可能存在的路径中,选出一条长度最短的路径。 若vi,vj存在,则存在路径{vi,vj} // 路径中不含其它顶点 若vi,v0,v0,vj存在,则存在路径{vi,v0,vj} // 路径中所含顶点序号不大于0 若{vi,…,v1}, {v1,…,vj}存在, 则存在一条路径{vi, …, v1, …vj} // 路径中所含顶点序号不大于1 … 依次类推,则 vi 至 vj 的最短路径应是上述这些路径中,路径长度最小者。 1. 熟悉图的各种存储结构及其构造算法,了解实际问题的求解效率与采用何种存储结构和算法有密切联系。 2. 熟练掌握图的两种搜索路径的遍历:遍历的逻辑定义、深度优先搜索和广度优先搜索的算法。 在学习中应注意图的遍历算法与树的遍历算法之间的类似和差异。 3. 应用图的遍历算法求解各种简单路径问题。 4. 理解教科书中讨论的各种图的算法。 typedef struct VNode { VertexType data; // 顶点信息 ArcNode *firstarc; // 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_VERTEX_NUM]; data firstarc 顶点的结点结构 typedef struct { AdjList vertices; int vexnum, arcnum; int kind; // 图的种类标志 } ALGraph; 图的结构定义 三、有向图的十字链表存储表示 弧的结点结构 弧尾顶点位置 弧头顶点位置 弧的相关信息 指向下一个有相同弧尾的结点 指向下一个有相同弧头的结点 typedef struct ArcBox { // 弧的结构表示 int tailvex, headvex; InfoType *info; struct ArcBox *hlink, *tlink; } VexNode; 顶点的结点结构 顶点信息数据 指向该顶点的第一条入弧 指向该顶点的第一条出弧 typedef struct VexNode { // 顶点的结构表示
文档评论(0)