大二上 数据结构课程设计 学校超市选址问题 带权.docVIP

大二上 数据结构课程设计 学校超市选址问题 带权.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大二上 数据结构课程设计 学校超市选址问题 带权

大二上 数据结构课程设计 学校超市选址问题 带权 设计要求:对于某一学校超市,其他各单位到其的距离不同,同时各单位人员去超市的频度也不同。请为超市选址,要求实现总体最优。 解决方案:轮流以每一个顶点为源点,重复执行Dijkstra算法n次,就可求得每一对顶点之间的最短路径及最短路径长度,总的执行时间是O(n3)。 Dijkstra算法:Dijkstra算法也称单源最短路径。 为了求得这些最短路径,Dijkstra提出了按路径长度的递增次序,逐步产生最短路径的算法。首先求出长度最短的一条最短路径,然后参照它求出长度次短的一条最短路径,依次类推,直到从顶点u到其它各顶点的最短路径全部求出为止。 由于本人能力有限,时间有限所有只能写出这样的代码啦。也就应付应付学校,内存的回收工作都没有去写,还有很多扩展也没有去做。如果各位朋友有兴趣可以自己去扩展,比如加个点,加条边等等,都可以很方便的扩展。 这个程序是我用邻接表来实现的,网上有很多用邻接矩阵来实现。但他们的思想是一样的,都是用了Dijkstra算法。也许这个程序是我在大学写的最后一个用C++写的算法程序了吧。由于本人不喜欢研究这些神马般的算法,我更喜欢用C#,用VS来创造现实中有意义的东西。这也是我的目标成为一名优秀的工程师而不是一名研究人员。 还有一点我要声明,这个程序不希望有人用来做为应付学校工具,我希望大家在学习中找到快乐,而不是无尽的痛苦。 如果各位有兴趣,我正在做PPT和实验报告,大家可以问我要来参考一下。 还有,在程序中有些程序段我打了注释是一些测试代码而非实现代码。 源代码: 一个源文件 ////////////main.cpp////////////// #includeMyGraph.h #includeMyMethods.h void main() { cout*endl; cout*问题:学校超市选址问题(带权有向图的中心点)*endl; cout*endl; cout endl endl; int n=0,v=-1,BestVertex=-1;//初始化(n表示结点数,v表示源点) MyGraph*myGraph; MyMethods*myMethods=new MyMethods();//声明一个实例(包含了一些方法) do{ cout*endl; cout主菜单endl; cout1.读取文本数据endl; cout2.建立邻接表endl; cout3.输出邻接表endl; cout4.选择源点Vendl; cout5.得到源点的最短路径endl; cout6.得到中心最短路径endl; cout*endl; int choose; cout请选择(-1退出):;cin choose; if(choose==-1)return;//退出 switch(choose) { case 1: n=myMethods-ReadVertices(); myGraph=new MyGraph(n); break; case 2: if(n==0)break; cout邻接表正在建立中.endl; myGraph-Init(); break; case 3: if(n==0)break; myGraph-Display(); break; case 4: if(n==0)break; cout*注意:*请输入源点v(0~n-1):; cin v; break; case 5: if(n==0||v==-1)break; cout输出从源点到其它路径:endl; myGraph-Dijkstra(v); break; case 6: if(n==0)break; cout*下面给出所有路径*endl; BestVertex=myGraph-SelectBestVertex(); cout*endl; cout*综上所述,最佳点为:BestVertex点!endl; cout*endl; break; default: cout输入出错,请重新输入!endl; } if(n==0) { cout请先读取Vertices.txt文档内容。endl endl; continue; } cout endl; }while(true); } 两个头文件 ////////////MyGraph.h////////////// #include iostream.h #include fstream.h #include stdlib.h //边结构体 struct Edge { int dest;//边的另一个顶点的位置 int cost;//边上的权值 Edge*link;//下一条边链指针 Edge(int num,int weight) { dest=num;cost=wei

文档评论(0)

gz2018gz + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档