免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 任 务 书一、课程设计题目: 求最短路径算法的实现 二、课程设计主要参考资料(1)严蔚敏,吴伟民.数据结构(C语言版)M.北京:清华大学出版社,2006 (2)徐凤生,李天志.所有路径的求解算法J.计算工程与科学,2006,28(12):83-84 (3)王志和,凌云.Dijkstra最短路径算法的优化及实现J.软件时空,2007,23(11):275-277 三、课程设计拟解决的主要问题:(1) 最短路径的概念及算法介绍 (2) Dijkstra算法的基本思想和原理及实现 (3) (4) 四、课程设计相关附件(如:图纸、软件等):(1) Microsoft Visual C+ 6.0 (2) 五、任务发出日期: 2010-6-14 课程设计完成日期: 2010-6-28 指导教师签字: 教研室主任签字: 指导教师对课程设计的评语成绩: 指导教师签字: 年 月 日一、 Dijkstra算法简介Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式,Drew为了和下面要介绍的 A* 算法和 D* 算法表述一致,这里均采用OPEN,CLOSE表的方式。二、 Dijkstra算法思想迪杰斯特拉(Dijkstra)算法是用来求解有向图的最短路径问题的经典算法.它的基本思想是,从一个起点出发,依次寻找到起点最近的结点.每找到一个结点,就放进一个闭表中,并在寻找结点的过程中,记录起点到各点的最短路径.起点到各点的最短路径不是一成不变的.它随着搜寻的深入不断修改更新.比如从v0到v1初始时距离为30,此为它初始时的最短距离,v0, v1也为v1的最短路径.而搜寻到v2时, v0-v2=10, v2-v1=5; 即v0-v3-v2=15;此时v0到v1的最短距离就被更新为15,其最短路径也变为v0, v2, v1. 当然,后面还有可能存在v0-v7-v9-v8-v999-v1 = 10这样更短的路径. 当整张图搜索完毕时,所有顶点到起点的最短路径也就确三、 Dijkstra算法具体步骤创建两个表,OPEN, CLOSE。OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。1 访问路网中距离起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。2 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。3 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。4 重复第2和第3步,直到OPEN表为空,或找到目标点。四、 Dijkstra算法的流程图六、项目设计内容:通过设计一个C+ 程序,运用D算法,用以求各个节点直接的最短路径最后利用程序求得节点到各个节点之间的最短路径。设计节点图如图-1所示七、 程序源代码#include void main() int infinity=100,j,i,n,k,t,*w,*s,*p,*d; coutn; coutendl; d=new intn; s=new intn; p=new intn; w=new int*n; for(i=0;in;i+) wi=new intn; for(i=0;in;i+) for(j=0;jwij; for(s0=1,i=1;in;i+) si=0;di=w0i; if(diinfinity) pi=0; else pi=-1; for(i=1;in;i+) t=infinity;k=1; for(j=1;jn;j+) if(!sj)&(djt) t=dj;k=j; sk=1;/point k join the S for (j=1;jdk+wkj) dj=dk+wkj;pj=k; cout从源点到其它顶点的最短距离依次如下:; for(i=1;in;i+) coutdi ; 八、程序运行结果九、设计结果分析 它是运用贪心的算法不断添加点从而到达终点。建立一个集合,在代码中可以用来标记一下就可以。这个集合的初始时只有起点,我们把从源到u且中间只经过S中顶点的路程为从源到u的特殊路径,并用dist数组记录当前每个顶点所对应的最短特殊路径。Dijkstra算法从源出发,达到直接相连的点i,设为一层点,并把disti赋为其权值。然后再检查与这几个点(除源点)相连的点,设为二层点,二层点中可能有一层点,比较一下源点直接到该点的路程和源点间接到达该点路程,修改dist,直到找到终点。十、设计总结(1) “按路径长度递增顺序”是因为,扩展下一个永久标记节点总是从U中节点的邻接节点中找到。(2) 虽然我们要求的是v0到某个目标节点的最短路径,但是在查找这条路径的过程中,我们可能附带的把顶点到其他节点的最短路径也求出来了。(3) Dijkstra算法包括N-1次的外层循环(每次循环找到起点到其中某个结点的最短路径)和两个内层循环,第1个内层循环要经过N次比较来完成对所有结点权值的调整,第2个内层循环从所有结点中找出权值最小的未标记结点,并置于U中,此循环也需要经过n次比较以找到符合条件的结点。Dijkstra算法的时间复杂度为O(n2)。(4) 以邻接矩阵为存储结构的Dijkstra算法是经典的最短路径算法;但是,该算法的实现需要耗费大量的时间和存储空间。目前,已有不少改进算法。比如采用邻接链表作为存储结构,并且为了加快搜索速度,根据距起点的最短路径的权值构造一优先级队列,按照权值大小由小到大排序。另外,从搜索范围角度考虑,Di
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 含货商铺转让合同范本
- 合法效的定金合同范本
- 员工分红协议合同范本
- 2025-2030智慧校园智慧教育管理平台行业市场分析用户需求竞争格局商业模式创新规划说明
- 关于资产置换合同范本
- 2025-2030智慧工厂自动化系统行业市场现状技术应用与投资评估规划研究
- 2025-2030智慧客服体系技术革新与应用前景分析
- 2025-2030智慧城市规划行业市场发展深度研究及投资趋势与战略布局报告
- 2025-2030智慧城市行业市场供需集成分析及资本投入规划研究资料
- 2025-2030智慧城市行业发展趋势分析及投资战略研究报告
- 2025年中小学教师职称评定答辩题(附答案)
- 2025-2026学年西师大版(2024)小学数学二年级上册(全册)教学设计(附教材目录P234)
- 2025昭通市盐津县公安局警务辅助人员招聘(14人)备考考试题库附答案解析
- 国开2025年《行政领导学》形考作业1-4答案
- 金龙湾水上旅游建设填海项目工程可行性研究报告
- 颈源性耳鸣的临床研究-中日友好医院针灸科李石良课件
- 架空光缆施工组织方案
- 汽车智能座舱市场分析
- 金坛区苏科版二年级上册劳动《06树叶书签》课件
- 检验员资格认定规定
- 燃机电厂初级培训教材课件
评论
0/150
提交评论