数据结构课程设计--弗洛伊德算法和最短路径.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文档。上传文档
查看更多
数据结构课程设计--弗洛伊德算法和最短路径

《数据结构课程设计报告》 学 院:信 息 科 学 技 术 学 院 题 目: 弗洛伊德算法与最短路径 一、课程设计题目 弗洛伊德算法与最短路径 用途简介 1、最短路径问题在生活中时常见到:比如,我们去某一地方,我们总是想知道到达目的地的最短路径,或者是最短到达时间。 2、设计思路: 先用迪杰斯特拉算法,找到有向图中某一顶点到别的顶点的最短路径,再不断的调用我们刚刚写的迪杰斯特拉算法。最后输出任意两点之间的最短路径。 迪杰斯特拉算法的实现方法是,对于有向图采用邻接矩阵的方法存放。然后建立两个数组,其中一个数组存放的是某一顶点到这点的最短路径的值。另一个数组定义为线性链表的表头单元,然后再数组后面不断加入顶点路径。再在迪杰斯特拉算法内部设一个数组,用来标记顶点元素是否被访问。每次在寻找权值最小的且没有被访问过得顶点。再加入新顶点后要修正那些还没有被访问的点的权值。 测试数据: 测试数据表一: 0 50 10 Inf 45 Inf Inf 0 15 Inf 10 Inf 20 Inf 0 15 Inf Inf Inf 20 Inf 0 35 Inf Inf Inf Inf 30 0 Inf Inf Inf Inf 3 Inf 0 表一的顶点数据在数组中按下标从小到大存放的顺序为abcdef。 测试数据表二: 0 4 Inf 12 0 5 6 Inf 0 表一的顶点数据在数组中按下标从小到大存放的顺序为ABC。 四、概要设计 1、元素类型、结点类型和指针类型: typedef struct arcnode { int adj; }arcnode; typedef struct { char vertex[max]; arcnode arcs[max][max]; int vexnum,arcnum; }matrix; typedef struct linknode { char data; struct linknode *next; }linklist; 2、建立一个头结点数组path[max],和最短路径数组dist[max]: int dist[max],i; linklist path[max]; 3、主函数和其他函数: void main() { matrix g; creatdn(g); int dist[max],i; linklist path[max]; for(i=1;i=g.vexnum;i++)//不断调用shortestpath(g,i,dist,path);输出各顶点间的最短路径。 { shortestpath(g,i,dist,path); } } 五、程序代码: #include stdio.h #include stdlib.h #include conio.h #include dos.h #define max 10 #define inf 3767 #define null 0 typedef struct arcnode { int adj; }arcnode; typedef struct { char vertex[max]; arcnode arcs[max][max]; int vexnum,arcnum; }matrix; void creatdn(matrix *g) { int i,j,k=0,weight; printf(%s\n,输入顶点数和边数); scanf(%d,%d,g-vexnum,g-arcnum); for(i=1;i=g-vexnum;i++) for(j=1;j=g-vexnum;j++) { g-arcs[i][j].adj=inf; } printf(%s\n,顶点信息); for(k=0;k=g-vexnum;k++) { scanf(%c,g-vertex[k]); } printf(%s\n,顶点i与j之间的权值); for(k=1;k=g-arcnum;k++) { scanf(%d,%d,%d,i,j,weight); g-arcs[i][j].adj=weight; } //printf(%c,g-vertex[0]); //printf(%c,g-vertex[1]); //printf(%c,g-vertex[2]); //printf(%c,g-vertex[3]); //printf(%d,g-arcs[0][1]); } typedef struct linknode { char data; struct linknode *next; }linklist; void init(linklist *l) { //

文档评论(0)

189****7685 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档