ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:1.03MB ,
资源ID:6912700      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6912700.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(城市之间最短路径管理软件.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

城市之间最短路径管理软件.docx

1、城市之间最短路径管理软件重庆大学实验报告实验题目: 城市之间最短路径管理软件 学 院: 计算机学院 专业班级: 年 级: 2011 姓 名: 学 号: 完成时间: 2013 年 6 月 17 日指导教师: 重庆大学教务处制实验项目指导教师评定成绩表学号: 姓名 班级: 项目分值参考标准评分学习态度10积极与老师、助教讨论(10分)学习马虎,纪律涣散(5分)缺勤(0分)软件/系统质量60功能考虑完善,界面友好,Bug极少,针对异常情况有处理(55-60分)功能考虑完善,界面良好,有一定Bug(49-54分)功能较完善,Bug较多(43-48分)完成程序基本功能(36-42分)部分实现,无法运行(

2、1-35分)抄袭、被抄袭(0分)实验演示答辩10重点突出、有特色、专业知识掌握好、能流畅回答老师提问(9-10分)有一定特色、能较好地回答老师提问(7-8分)能讲解项目的关键实现,能回答基本问题(0-6分)实验报告撰写质量20文档规范,文字、图表表达清楚(18-20分)文档较规范,文字、图表表达较清楚(11-17分)文档不规范,内容空泛、结构混乱(0-10分)指导教师评定成绩:指导教师签名: 年 月 日 重庆大学本科学生实验项目任务书实验题目城市之间最短路径管理软件学院计算机学院专业年级2011任务描述: 以项目组形式,实现项目所要求的功能。项目组每组24人,其中项目组长1人,负责项目整体进度

3、和协调项目组成员之间的工作,要求项目组成员分工明确,各自的工作量均衡,并在实践报告中注明每个人的分工和工作量。 综合运用C+编程技术和Dijkstra算法和Floyd算法,用VS2010或QT设计实现一个简单的城市之间最短路径管理软件,该软件能够模拟实现简单的路径维护、求解单源最短路径、求解所有节点间最短路径等功能。最后提交完整的设计报告和软件程序拷贝。设计要求:1.编写软件帮助旅行者了解从一个城市到另一个城市之间的最短路径。2.程序接受用户输入城市列表(包含城市名称信息)和连接用户城市的路径列表(包含距离信息),在软件运行过程中这些信息均可修改。要求城市数量不少于10,路径数量在30左右。3

4、.用户可以根据需要指定一个源点,软件需计算出该源点到其他剩余节点之间的最短距离和详细路径。4.用户可以直接查看所有城市之间的最短距离。参考资料:Data Structures and Algorithm Analysis (C+ Version) Clifford A. ShafferData Structure and Algorithm Analysis in C+ (Third Edition),Mark Allen Weiss, Pearson Education, 2006. Data Structures, Algorithms, and Applications in C+,Sa

5、rtaj Sahni, McGraw-Hill, 1998. 数据结构( C 语言版),严蔚敏,吴伟民编著,清华大学出版社,2007年第1版 任务下达日期 2013 年 4月 10 日完成日期 2013 年 6 月 17 日说明:学院、专业、年级均填全称,如:计算机学院、计算机科学与技术、2011。实验报告正文一.需求分析 随着现在科技的迅速发展,我们的生活节奏也越来越快,因此我们需要规划好我们的日程安排,我们的路程也不例外,我们需要尽可能地节约时间来完成我们其它的事情,所以拥有一个可以为我们计算最短路径的软件是一个不错的选择。为了响应广大用户的需求,我写了一个城市之间最短路径管理软件,用户只

6、需将地图中的所有城市和其距离写入一个文件中,即可用此软件计算所有的最短路径。我的然间可以帮助用户实现以下功能:1.帮助旅行者了解从一个城市到另一个城市之间的最短路径。2.程序接受用户输入城市列表(包含城市名称信息)和连接用户城市的路径列表(包含距离信息),在软件运行过程中这些信息均可修改。3.用户可以根据需要指定一个源点,软件需计算出该源点到其他剩余节点之间的最短距离和详细路径。4.用户可以直接查看所有城市之间的最短距离。 二.系统设计1.类图2.模块图 利用Dijkstra算法计算单源最短路径根据用户的输入信息构图利用Floyd算法计算所有节点之间的最短路径主函数调用构图函数构图,调用Dij

7、kstra算法和Floyd算法,并将结果写入相应的文件中 三关键代码描述#include#include#include#includelink.h#includelist.h#includellist.h#includebook.h#includegraph.h#includegrmat.husing namespace std;int n,m;/n为城市个数,m为路径的个数LListMAP;/用链表存储城市及其标号Graphm G(n);void CREATGRAPH()/从文件中的相关数据构图 ifstream file1(map.txt); /文件的格式见map.txt if(!fil

8、e1.good() cout nm; int* Map= new int*n; for(int i=0;in;i+) Mapi=new intn; for(int i=0;in;i+) for(int j=0;jn;j+) Mapij=0; /将地图中的城市及其标号存入链表MAP中 for(int i=0;istr1) if(str1=() continue; else if(str1=48&str1=57) nump=str1; p+; else if(str1=) nump=0; lable=atoi(num); else if(str10) str2+=str1; else if(str

9、1=,) MAP.append(lable,str2); break; else if(str1=!) MAP.append(lable,str2); break; else continue; /将城市间的距离存入矩阵Map中 for(int i=0;istr) if(str=48&str=57) nump=str; p+; else if(str=-) nump=0; lable1=atoi(num); p=0; else if(str=:) nump=0; lable2=atoi(num); p=0; else if(str=,) nump=0; wght=atoi(num); brea

10、k; else if(str=!) nump=0; wght=atoi(num); break; else continue; Maplable1lable2=wght; file1.close(); /根据矩阵中的距离信息构图 G.Init(n); int flag; cout0代表无向图,1代表有向图,请选择二进制数0或1flag; if(flag=1)/根据用户的信息构有向图 for(int lab1=0;lab1n;lab1+) for(int lab2=0;lab2n;lab2+) if(lab1!=lab2) if(Maplab1lab2!=0) G.setEdge(lab1,la

11、b2,Maplab1lab2); else G.setEdge(lab1,lab2,INFINITY); else continue ; cout构图成功!endl; else if(flag=0)/根据用户的信息构无向图 for(int lab1=0;lab1n;lab1+) for(int lab2=0;lab2n;lab2+) if(lab1!=lab2) if(Maplab1lab2!=0) G.setEdge(lab1,lab2,Maplab1lab2); G.setEdge(lab1,lab2,Maplab1lab2); else G.setEdge(lab1,lab2,INFIN

12、ITY); else continue; cout构图成功!endl; else cout由于您输入了系统无法辨认的数字flag,所以无法为您计算城市间的最短路径T_Tendl; cout若想继续计算城市间的最短路径,请重新启动该软件*_*endl; system(pause); int minVertex(Graph* G, int* D) / Find min cost vertex int i, v = -1; / Initialize v to some unvisited vertex for (i=0; in(); i+) if (G-getMark(i) = UNVISITED)

13、 v = i; break; for (i+; in(); i+) / Now find smallest D value if (G-getMark(i) = UNVISITED) & (Di Dv) v = i; return v;/ Compute shortest path distances from s./ Return these distances in D.int *pre=new intG.n();/定义一个一维矩阵记录路径void Dijkstra(Graph* G, int* D, int s) for(int j=0;jn();j+) prej=s; int i, v

14、, w; for (i=0; in(); i+) / Process the vertices v = minVertex(G, D); if (Dv = INFINITY) return; / Unreachable vertices G-setMark(v, VISITED); for (w=G-first(v); wn(); w = G-next(v,w) if (Dw (Dv + G-weight(v, w) Dw = Dv + G-weight(v, w); prew=v; int *P=new int*G.n();/定义一个二维矩阵/ Floyds all-pairs shorte

15、st paths algorithm/ Store the pair-wise distances in Dvoid Floyd(Graph* G) /计算所有节点之间距离的算法 for (int i=0; in(); i+) / Initialize D with weights for (int j=0; jn(); j+) if (G-weight(i, j) != 0) Pij = G-weight(i, j); for (int k=0; kn(); k+) / Compute all k paths for (int i=0; in(); i+) for (int j=0; jn(

16、); j+) if (Pij (Pik + Pkj) Pij = Pik + Pkj;/主函数调用部分int main() CREATGRAPH();/调用构图函数 /*/ cout地图中的所有城市及其编码如下:endl; for(int i=0;iMAP.length();i+)/地图中的所有城市及其编码 MAP.moveToPos(i); coutMAP.getCity()(MAP.getLable(); int *D=new intG.n(); for (int i=0; iG.n(); i+) / Initialize Di = INFINITY; /*/ string city; c

17、outendl; cout请输入您的源点城市名字city; int s; for(int i=0;iMAP.length();)/查找用户输入的城市是否在图中 MAP.moveToPos(i);/在的话找到其相应的标号 if(MAP.getCity()=city) s=MAP.getLable(); break; /不在的话输出提示信息 else if(i=MAP.length()-1)&MAP.getCity()!=city) cout您所输入的源点不在图中,请检查输入!endl; cout若想继续查找单源城市最短路径,请重新启动该软件!endl; system(pause); else i

18、+; Ds = 0; /*/ /调用Dijkstra算法计算并输出单源最短路径 Dijkstra(&G,D, s); coutendl; ofstream file2; file2.open(single-path1.txt); file2city到所有城市之间的最短路径及其距离:endl; for(int k=0; kG.n(); k+)/将求出的最短路径及其距离写入 MAP.moveToPos(k);/single-path1中 file2MAP.getCity()到city:; if(Dk=INFINITY|Dk=9999) file2无路径可达endl; else int z=k; M

19、AP.moveToPos(z); file2MAP.getCity(); while(prez!=s) MAP.moveToPos(prez); file2MAP.getCity(); z+; file2city:; file2 Dk endl; file2endl; file2.close(); coutcity到所有城市之间的最短路径及其距离已写入single-path1,请查看endl; coutendl; /*/ /调用Floyd算法计算并输出所有城市之间的最短路径距离 ofstream file3; file3.open(all-path1.txt); int i,j; file3所

20、有节点之间的最短距离:endl; for (int i=0; iG.n(); i+) Pi=new intG.n(); for (i=0; iG.n(); i+) for (j=0; jG.n(); j+) Pij = INFINITY; for (i=0; iG.n(); i+) Pii = 0; Floyd(&G); file3 ; for(int i=0;iMAP.length();i+) MAP.moveToPos(i); file3MAP.getCity() ; file3endl; for (i=0; iG.n(); i+) /在文件all-path中输出所有城市之间的最短距离 M

21、AP.moveToPos(i); file3MAP.getCity(); for (j=0; jG.n(); j+) if (Pij = INFINITY) file3 -1 ; else file3 Pij ; file3 endl; file3.close(); cout所有城市之间的最短距离已写入all-path1,请查看endl; MAP.clear();/清楚链表的元素,以防修改信息后重新构图出现重复 cout*endl; /*/ /用户修改路径信息 int change; cout如果您想要修改城市路径信息,请在map.txt里修改保存endl; cout请务必确保在输入1之前你已

22、经修改了您的信息,否则将会根据原来信息计算最短路径endl; cout修改后的单源路径写入single-path2;所有路径写入all-path2endl; cout输入数字1,可以显示修改后的最短路径信息,输入其它数字退出程序change; /*/ /下面计算过程和程序代码同上面 if(change=1) CREATGRAPH(); ofstream file4; file4.open(single-path2.txt); int *D=new intG.n(); for (int i=0; iG.n(); i+) / Initialize Di = INFINITY; string cit

23、y; coutendl; cout请输入您的源点城市名字city; int s; for(int i=0;iMAP.length();) MAP.moveToPos(i); if(MAP.getCity()=city) s=MAP.getLable(); break; else if(i=MAP.length()-1)&MAP.getCity()!=city) cout您所输入的源点不在图中,请检查输入!endl; cout若想继续查找单源城市最短路径,请重新启动该软件!endl; system(pause); else i+; Ds = 0; /*/ Dijkstra(&G,D,s); co

24、utendl; file4city到所有城市之间的最短路径及其距离:endl; for(int k=0; kG.n(); k+) MAP.moveToPos(k); file4MAP.getCity()到city的距离是:; if(Dk=INFINITY|Dk=9999) file4无路径可达endl; else int z=k; MAP.moveToPos(z); file4MAP.getCity(); while(prez!=s) MAP.moveToPos(prez); file4MAP.getCity(); z+; file4city:; file4 Dk endl; file4 endl; file4.close(); /*/ ofstream file5; fil

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1