电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

求最短路径_C语言程序

求最短路径_C语言程序_第1页
1/10
求最短路径_C语言程序_第2页
2/10
求最短路径_C语言程序_第3页
3/10
中国地质大学(武汉) 数据结构 课程设计报告 ****: *** 班级序号: 学 号: 姓 名: 实习二 求最短路径 一.问题描述 试设计一个算法,求图中一个源点到其他各顶点的最短路径。 二.基本要求 (1 )用邻接表表示图; (2 )按长度非递减次序打印输出最短路径的长度及相应路径。 三.测试数据 四.用到的数据结构和函数 (1 )定义数组 typedef char VertexType; typedef int Adjmatrix; typedef struct { VertexType vexs[MVNum]; //顶点数组,类型假定为char 型 Adjmatrix arcs[MVNum][MVNum]; //邻接矩阵,类型假定为int 型 }MGraph; (2 )迪杰斯特拉算法 void Dijkstra(MGraph *G,int v1,int n) { //用迪杰斯特拉算法求有向图G 的v1 顶点到其他顶点v 的最短路径P[v]和其权D[v] //设G 是有向图的邻接矩阵,若边不存在,则 G[i][j]=Maxint //S[v]为真当且仅当 v 在 S 中 int D2[MVNum],P2[MVNum]; int v,i,w,min; enum boolean S[MVNum]; for(v=1;v<=n;v++) {//初始化 S 和D S[v]=FALSE; //设置最短路径终点集 D2[v]=G->arcs[v1][v]; //设置初始的最短路径值 if(D2[v]arcs[v][w]arcs[v][w]; P2[w]=v; } } printf("路径长度 路径\n"); for(i=1;i<=n;i++) { printf("%5d",D2[i]); printf("%5d",i); v=P2[i]; while(v!=0) { printf("<-%d",v); v=P2[v]; } printf("\n"); } } (3 )费洛伊德算法 void Floyd(MGraph *G,int n) { int i,j,k,v,w; for(i=1;i<=n;i++) //设置路径长度D 和路径path 初值 for(j=1;j<=n;j++) { if(G->arcs[i][j]!=Maxint) P[i][j]=j; //j 是i 的后继 else P[i][j]=0; D[i][j]=G->arcs[i][j]; } for(k=1;k<=n;k++) { //做k 次迭代,每次均试图将顶点k 扩充到当前求得的从i 到j 的最短路...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

求最短路径_C语言程序

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部