- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验八:校园交通咨询系统设计(最短路径)
实验八:校园交通咨询系统设计(最短路径)8.1 问题描述设计一个校内交通咨询系统,能让旅客咨询从任一教学楼到其余所有教学楼之间的最短路径,以及任意两幢教学楼之间的最短路径。校园内简图见图8-1,为通俗化程序,用数字序号代替楼的名称。图8-18.2 输入与输出输入:输入图的顶点数,以及边数。输出:一幢楼到其他楼之间的最短路径,以及任意两幢楼之间的最短路径。8.3 需求分析1.建立交通网络图的存储结构。2.解决单源最短路径问题。3.最后实现两幢楼之间的最短路径。8.4概要设计1.结构定义图的存储结构(邻接矩阵)#define MVNum 50 /*最大顶点数*/typedef int VertexType; typedef int Adjmatrix;typedef struct{ VertexType vexs[MVNum]; Adjmatrix arcs[MVNum][MVNum];}MGraph;2.函数模块void CreateMGraph( MGraph *G, int n,int e)/*采用邻接矩阵表示法构造有向图G,n,e表示图的当前顶点数和边数*/void Dijkstra(MGraph *G, int v1,int n) /*迪杰斯特拉算法*/void Floyd(MGraph *G, int n)/*费洛伊德算法 */8.5详细设计#include stdio.h#include stdlib.h#define MVNum 50 /*最大顶点数*/#define Maxvalue 32767enum boolean {FALSE ,TRUE};typedef int VertexType; typedef int Adjmatrix;typedef struct{ VertexType vexs[MVNum]; Adjmatrix arcs[MVNum][MVNum];}MGraph;int D1[MVNum], path1[MVNum];//D都是表示路径长度,p都是表示路径经过的顶点。源点到所有顶点int D[MVNum][MVNum], path[MVNum][MVNum];//任意两个顶点之间的最短路径void CreateMGraph( MGraph *G, int n,int e);void Dijkstra(MGraph *G, int v1,int n) ;void Floyd(MGraph *G, int n);void main(){ MGraph *G; int n,e,v,w,k;int choice= 1; G=(MGraph *)malloc(sizeof(MGraph)); printf(\n请输入图中顶点的个数和边数 n,e:\n); scanf(%d,%d,n,e);CreateMGraph(G,n,e);/*建立图的存储结构*/printf(****计算校园内教学楼之间的最短路径****\n);printf(\n**********************************\n);printf(1.求一幢教学楼到所有教学楼的最短路径\n);printf(2.求任意两幢教学楼之间的最短路径\n);printf(0.退出程序\n);printf(********************************\n);printf(请输入您的选择:1 or 2 or 0 .\n);while(choice!=0) /*可以改为choice,把结构换成switch choice结构*/{scanf(%d,choice);switch(choice){case 2: Floyd(G,n); /*调用费洛尹德函数*/ printf(输入源点和终点:v,w:); scanf(%d,%d,v,w); k=path[v][w]; /*k为起点v的后继顶点*/ if(k==0) printf(顶点%d 到%d无路径!\n,v,w); else printf(从顶点%d到%d的最短路径是:%d,v,w,v); while(k!=w ) { printf(-%d,k);/*输出后继顶点*/ k=path[k][w]; } printf(-%d,w); printf(路径长度:%d\n,D[v][w]);printf(请输入您的选择:1 or 2 or 0 .\n);break;case 1: printf(求单源路径,输入
文档评论(0)