下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、姓名:张进 学号:03091256 班级:030913班实验六:编程实现dijkstra 算法求最短路问题.1.需求分析:首先让用户输入一个带权的有向图,输入时可通过一对一对输入存在弧的两个弧头与弧尾顶点以及弧上的权值从而输入整个有向图。用户输入一对对弧后,我们可以采用数组的形式来进行存储每个顶点之间的权值,最后由用户输入该有向图的源点(即每个最短路径的起点),要求源点必须为刚才输入的各顶点中的某一个,如果用户输入错误,程序要给出错误信息提示并退出程序。然后,我们可以设计一个graph这样的类,将对关系的各种操作放入其中,然后我们在主函数中调运这个类就可以实现最短路问题的求解了。2.概要设计:
2、.构造一个新的类graph:class graphprivate: int arcsmaxmax,pathmaxmax,dmax; int arcnum,vexnum,weight,v0; type a,b,vexsmax;public: void creat_graph(); void show_shortestpath(); void shortestpath_dij();.结构化调用类中方法的主函数:int main()graph <char> g; g.creat_graph(); g.shortestpath_dij(); g.show_shortestpath();re
3、turn 0;3.代码实现:#include <iostream>#define max 100#define infinity int_max enum boolfalse,true; using namespace std;template <typename type>class graphprivate: int arcsmaxmax,pathmaxmax,dmax; int arcnum,vexnum,weight,v0; type a,b,vexsmax;public: void creat_graph(); void show_shortestpath()
4、; void shortestpath_dij();template <typename type> void graph<type>:creat_graph() int i,j,x,y; cout<<"请输入你要处理的有向图中包含弧的个数:" cin>>arcnum; vexnum=0; for(i=1;i<=max;i+) for(j=1;j<=max;j+) arcsij=int_max; for(i=1;i<=arcnum;i+) cout<<"请依次输入第"<&
5、lt;i<<"条弧的弧头与弧尾的顶点以及该弧上所附带的权值:"<<endl; cin>>a>>b>>weight; x=0; y=0; for(j=1;j<=vexnum;j+) if(vexsj=a) x=j; continue; else if(vexsj=b) y=j; continue; if(x=0) vexs+vexnum=a; x=vexnum; if(y=0) vexs+vexnum=b; y=vexnum; arcsxy=weight; cout<<"请输入该有向图的源
6、点(即各最短路径的起始顶点):" cin>>a; for(i=1;i<=vexnum;i+) if(vexsi=a) v0=i; break; template <typename type> void graph<type>: show_shortestpath() int i,j,k; for(i=1;i<=vexnum;i+) if(i=v0) continue; if(di!=int_max) cout<<"从源点"<<vexsv0<<"到"<&l
7、t;vexsi<<"的最短路径为:"<<endl; for(k=1;k<=pathi0;k+) if(k!=1) cout<<"->" for(j=1;j<=vexnum;j+) if(pathij=k) cout<<vexsj; cout<<" "<<"其最短的路径长度为:"<<di<<endl; else cout<<"无法从源点"<<vexsv0<
8、<"到达顶点"<<vexsi<<"."<<endl; cout<<endl;template <typename type>void graph<type>:shortestpath_dij() int v,w,finalmax,min,i,j; for(v=1;v<=vexnum;v+) finalv=false; dv=arcsv0v; pathv0=0; for(w=0;w<=vexnum;w+) pathvw=false; if(dv<int_max)
9、 pathvv0=+pathv0; pathvv=+pathv0; dv0=0; finalv0=true; for(i=1;i<=vexnum;i+) if(i=v0) continue; min=int_max; for(w=1;w<=vexnum;w+) if(!finalw) if(dw<min) v=w; min=dw; finalv=true; for(w=1;w<=vexnum;w+) if(!finalw&&(min+arcsvw<dw)&&min<int_max&&arcsvw<int_
10、max) dw=min+arcsvw; for(j=0;j<=vexnum;j+) pathwj=pathvj; pathww=+pathw0; int main()graph <char> g; g.creat_graph(); g.shortestpath_dij(); g.show_shortestpath();return 0;4.调试分析:起先在主函数中调用类graph时将类型参数t赋值为int从而导致用户输入的关系集合r中的元素必须为整数。经分析后将t赋值为char,当用户输入的r的元素为int时,我们可以将其转化为char在进行后续操作,从而实现对用户输入的关系r中元素的无限制。在类graph的模板外定义成员函 g.creat_graph()g.shortestpath_dij()g.shortestpath_dij()时,由于成员函数中有类型参数存在,则需要在函数外进行模块声明,并且在函数名前缀上“类名<类型参数>”。5.运行结果:下图为有向图g的带权邻接矩阵,运用dijkstra算法计算从a到其余各顶点的最短路径以及其长度。 a b c d e f 分析可知:a 10 30 100 从a到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 猪肉分割师傅外包合同
- Solid 基础教程设计6
- 新建无汞环保新能源电池项目可行性研究报告模板-备案审批
- 医疗美容整形手术知情同意合同
- 2026年国际汉语教师证书考试汉语教学跨学科试卷及答案
- 我爱我们班课件-2026-2027学年道德与法治二年级上册统编版
- 护理服务中的礼仪表现
- 护理文书记录与沟通技巧
- 排泄护理职业发展
- 护理健康教育策略与方法
- 【《基于SOR模型的电商直播对消费者购物行为的影响实证研究》17000字(论文)】
- 6.1认识经济全球化课件-2025-2026学年高中政治统编版选择性必修一当代国际政治与经济
- 2025年国资央企答题题库及答案
- 2025年贵州省员额检察官遴选考试真题及答案
- 20.5 跨学科实践:制作简易直流电动机 课件 2025-2026学年人教版物理九年级全一册
- 2026年中国电信数据业务项目经营分析报告
- 2025年6月英语四级选词填空训练及答案
- 教师资格证高级考试试题及答案
- 烟叶种植基础知识培训课件
- 医院后勤安全知识培训课件
- 2025年湖南省高中学业水平合格考试英语试卷真题(含答案详解)
评论
0/150
提交评论