- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 体例格式12:任务1教学单元5工学一体化课程《windows服务器基础配置与局域网组建》之教学单元活动方案.docx VIP
- 农机防灾减灾培训课件.pptx VIP
- JB∕T 13977-2020 液化天然气(LNG)低温潜液泵.pdf
- 霍尼韦尔HD200-CRT消防控制室图形显示装置.docx VIP
- 中职语文高教版(2023)拓展模块上册《黄山记》课件.pptx VIP
- 2025春季江苏辖区农村商业银行校园招聘笔试备考题库及答案解析.docx VIP
- 烧烫伤急救ppt课件.ppt VIP
- 外研版(2024)七年级英语上册期中测试卷.pdf VIP
- 中国常规肺功能检查基层指南(2024 年)解读PPT课件.docx VIP
- 小学数学说题稿——2024年整理.pdf VIP
原创力文档


文档评论(0)