




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验八:校园交通咨询系统设计(最短路径)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 vexsMVNum; Adjmatrix arcsMVNumMVNum;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 vexsMVNum; Adjmatrix arcsMVNumMVNum;MGraph;int D1MVNum, path1MVNum;/D都是表示路径长度,p都是表示路径经过的顶点。源点到所有顶点int DMVNumMVNum, pathMVNumMVNum;/任意两个顶点之间的最短路径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=pathvw; /*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=pathkw; printf(-%d,w); printf(路径长度:%dn,Dvw);printf(请输入您的选择:1 or 2 or 0 .n);break;case 1: printf(求单源路径,输入源点v:); scanf(%d,&v); Dijkstra(G,v,n); printf(请输入您的选择:1 or 2 or 0 .n);break;default: printf(结束求最短路径,再见!n);/*输入所有有向边及其权值,建立有向图的存储结构*/void CreateMGraph( MGraph *G, int n,int e)/*采用邻接矩阵表示法构造有向图G,n,e表示图的当前顶点数和边数*/ int i,j ,k,w; for(i=1;ivexsi=i; for(i=1;i=n;i+) for(j=1;jarcsij=Maxvalue; /*初始化邻接矩阵 应该是32767*/printf(输入%d条边的i,j及w:n,e);for(k=1;karcsij=w;printf(图的存储结构建立完毕nn);void Dijkstra(MGraph *G, int v1,int n) /*地杰斯特拉算法c语言描述*/ /*用地杰斯特拉算法求有向图G的v1顶点到其他顶点的最短路径Pv及其权DV设G是有向图的邻接矩阵,若边 不存在,则Gij=Maxintsv为真当且仅当v属于s,即已求得从v1到v的最短路径*/int D2MVNum,path2MVNum;int v,i,w,min;enum boolean sMVNum;for(v=1;varcsv1v;/*置初始的最短路径值*/if(D2vMaxvalue) path2v=v1;/*v1是v的前驱*/else path2v=0;/*v无前驱*/D2v1=0;sv1=TRUE;/*s集初始时只有源点,源点到源点的距离为0开始循环,每次求得v1到某个v顶点的最短路径,并加v到s集中*/for(i=2;i=n;i+)/*其余n-1个顶点*/min=Maxvalue;for(w=1;w=n;w+) if(!sw&D2wmin) v=w;min=D2w;/*w顶点离v1顶点更近*/ sv=TRUE; for(w=1;warcsvwarcsvw; path2w=v;printf(路径长度 路径n);for(i=1;i=n;i+)printf(%6d,D2i); printf(%13d,i); v=path2i;while(v!=0)printf(-%d,v);v=path2v;printf(n);/*非罗伊德算法*/void Floyd(MGraph *G, int n) int i,j,k,v,w; for(i=1;i=n;i+) for(j=1;jarcsij!=Maxvalue) pathij=j;/* j是i的后继*/ else pathij=0; Di
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年芜湖市国有资本投资运营有限公司招聘10人考前自测高频考点模拟试题附答案详解(突破训练)
- 安全培训英文课件
- 2025福建三明大田县公开招聘紧缺急需专业教师7人模拟试卷及答案详解(历年真题)
- 2025甘肃陇南市宕昌县有关单位招聘公益性岗位人员30人模拟试卷含答案详解
- 2025安徽工程大学硕士专职辅导员招聘8人模拟试卷附答案详解(考试直接用)
- 2025福建省高速公路集团有限公司招聘43人考前自测高频考点模拟试题及1套完整答案详解
- 安全培训职业危害因素
- 安全培训者培训总结报告课件
- 2025广西钦州市北部湾大学公开招聘高层次人才53人考前自测高频考点模拟试题及答案详解1套
- 2025年福建省福州市中医院招聘12人模拟试卷及答案详解(名师系列)
- 风机叶片吊装安全培训课件
- 2025年第一期反洗钱专题培训测试题及答案
- 2025年安徽萧县县直事业单位招聘115人笔试备考题库附答案详解
- 风险分级管控和隐患排查治理体系培训考试试题(附答案)
- 2025年保安员考试经典例题附完整答案详解(典优)
- 网络安全宣传周网络安全知识竞答考试题及答案
- 新能源电厂培训课件
- 司法局社区矫正工作汇报
- 生物安全培训上岗证课件
- 超声医疗安全风险培训课件
- 蜜蜂科普知识教学课件
评论
0/150
提交评论