西南交通大学数据结构课程设计报告.docxVIP

  • 0
  • 0
  • 约4.4千字
  • 约 7页
  • 2019-12-16 发布于广东
  • 举报

西南交通大学数据结构课程设计报告.docx

西南交通大学 数据结构课程设计 学院:信息科学与技术学院 专业:计算机科学与技术 班级:计科4班 姓名:李娜 学号(-) 相关函数 首先创建CreatUDN()函数生成一个拥有25个城市,30条公路的交通图,并 录入两城市之间的权值即距离,其中顶点对应于城市,边对应于城市间直接通路,根 据实际问题,在生成的交通图中所有的通路都是双向的,即如果A城市到B城市有直 接通路,且里程为k千米,则B城市到A城市也有直接通路,并且里程同样为k千米。 创建对话框提示用户输入发出城市和终到城市的序号,再调用ShortestPath( 数求岀 最短路径,由Output()函数输出结果。 ShortestPath()利用了数据结构中图论中的最短路径相关的弗洛伊德算法。 Output()函数把计算的结果格式化输出。 (二)对于带有权值的网络图求解最小路径问题,一般有两种算法:迪杰斯特拉和弗 洛伊德算法,前者是求解单源最短路径问题,后者是求全源最短路径问题。就本程序 而言用迪杰斯特拉比较简单,因而釆用前者。 (三)具体实现 CreatUDN()函数生成一首先通过个拥有25个城市,30条公路的交通图 根据用户输入的顶点数和边数生成一个相应的交通图,其屮顶点对应于城市,边对应 于城市间直接通路。 void CreateUDN(v,a) /*造图函数 向图*/ int v,a;构造无图 { int i,j; G.vexnum=v; G.arcnum=a; for(i=0;iG.vexnum;++i) G.vex[i].number=i; /*下边是城市名*/ Gvex[0].city=M 乌鲁木齐”; G. vex [11] .city=郑州”; Gvex[24].city=深圳”; 八这里把所有的边假定为20000,含义是城市间不可到达勺 for(i=0;iG.vexnum;++i) for(j=0;jG.vexnum;++j) Garcs[i]|j].adj=20000; /*下边是可直接到达的城市间的距离,由于两个城市间距离是互相的, 所以要对图中对称的边同吋赋值。*/ G.arcs[0][2].adj=G.arcs[2][0].adj=1892; G.arcs[l]⑵.adj=G.arcs[2] [l].adj=216; G.arcs[18][19].adj=G.arcs[19][18].adj=367; Garcs[19][20|.adj=G.arcs[20][19].adj=622; ? ? ? G.arcs[10][ll].adj=G.arcs[ll][10].adj=511; G.arcs[ll][l2].adj=G.arcs[12][l l].adj=349; 调用narrate ()函数输出提示信息,提示用户输入发出城市和终到城市的 序号:narrate ()函数把能够进行计算的城市列表按简单的格式进行输出 void narrate() /*说明函数*/ int i,k=0; 欢迎使用最优交通路径程制作人李娜 欢迎使用最优交通路径程 制作人李娜\n”); 序 I*************** \十)? printf(H\n printf(H\n城市列表如下:\n\n); for(i=0;i25;i++) printf(” (%2d)%?10s”,i,Gvex[i].city);/* 输出城市列表 */ k=k+l; if(k%4==0) printf(H\nH); } 用ShortestPath()函数求出最短路径具体功能实现及相应的迪杰斯特拉算法 为了便于ShortestPathO函数的计算,在生成的交通图中所有的通路都是双向的,即 如果A城市到B城市有直接通路,且里程为k千米,则B城市到A城市也有直接通路, 并且里程同样为k千米。 void ShortestPath(num) /*最短路径函数 可以查询距离最近的点*/ int num; int v, w, i, t; int final [25]; AfInal成员变量表示常量,只能被赋值一次,赋值后值不再改变。 int min; for (v=0;v25;++v) { final[v]=0;D[v]=G. arcs[num][v].adj; for(w=0;w25;++w) P[v][w]=0; if(D[v]20000) {P[v][num]=l;P[v][v]=l;} } D[num]二0;final[num]=l; for(i=0;i25;++i) { in in二20000; for (w=0;w25;++w) if(!final[w]) if(D[w]min){v=w;min=D[w];} final[v]=l; for (w=0;w25;++w)

文档评论(0)

1亿VIP精品文档

相关文档