中国地质大学数据结构课设全国铁路运输网最佳经由问题课程设计报告Word格式文档下载.docx
- 文档编号:16484757
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:69
- 大小:886.36KB
中国地质大学数据结构课设全国铁路运输网最佳经由问题课程设计报告Word格式文档下载.docx
《中国地质大学数据结构课设全国铁路运输网最佳经由问题课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《中国地质大学数据结构课设全国铁路运输网最佳经由问题课程设计报告Word格式文档下载.docx(69页珍藏版)》请在冰豆网上搜索。
(4)针对客运,货运情况能计算任何一个起始车站到任何一个终点站之间的最短路径。
并且要求能够显示出该最短路径的各个火车站的经由顺序
第二章全国铁路运输网最佳经由问题
本次采用了邻接矩阵的结构体和图的结构体用以存储图形数据。
且本次图应为无相图。
定义如下。
typedefstruct
{
intid;
charname[20];
chardes[100];
}vinfo;
//站点
intdistance;
intkind;
}ArcCell,AdjMatrix[MAX_V_NUM][MAX_V_NUM];
//邻接矩阵
typedefstruct{
vinfovexs[MAX_V_NUM];
AdjMatrixarcs;
intvexnum,arcnum;
}MGraph;
//图
最短路径查询:
迪杰斯特拉算法。
两站之间的所有路径:
深度优先遍历。
2.2程序设计思想'
核心问题:
求最短路径(我们的程序参考的是数据结构课本中的“迪杰斯特拉算法”)
数据模型(逻辑结构):
带权无向图。
(采用2.1中所述的结构体,并且本程序采用的是文件存储数据。
初次运行时需要写入站点和线路以及各方面的信息。
在之后的操作中,进行的各种信息更改都会在程序运行中自动保存到文件中。
)
根据6的基本功能编写6个函数,再根据各个函数所需实现的功能编写所需的嵌套的函数。
逐层解决。
最后进行调试运行。
2.3程序流程图
intmain();
//主函数
voidwelcome();
//欢迎界面
voidsearch_vex_info();
//站点信息介绍
voidsearch_rantwo_short();
//查询任意两个站点之间的一条最短简单路径
voidmap_manage();
//站点线路修改扩充
voidsearch_two_allpath();
//查询两站点间所有路径
voidsearch_kh_path();
//客货运类别路径查询
voidcreate_map();
//初始化地图
voidsave_map();
//将程序中的图结构体写入数据文件
intinput_num_check(intmin,intmax);
//数字输入检验
voidshortest_path_ota(intbegin);
//生成某一站点到所有其它站点的最短路径数据
voidmap_add_vex();
//新增站点
voidmap_add_road();
//新增道路
voidmap_revise_vex();
//修改站点
voidmap_revise_road();
//修改道路(引导界面)
voidmap_reroad_in(intvid);
//修改道路(公用嵌入函数)
voidmap_delete_vex();
//删除站点
voidmap_delete_road();
//删除道路(引导界面)
voidmap_re_arc(intbid,intfid,intkind,intxid);
//修改道路(模块函数)若修改终点:
调用前需确保xid(新终点)与原终点不相同
voidDFS_allpath(intbid,intfid,intk);
//寻找两点间所有路径并输出
voidsearch_kh_kh(intkind);
//查找所有符合类别的路径
voidDFS_allpath_kh(intbid,intfid,intk,intkind);
//寻找两点间所有路径并判断该路径上到道路是否全为客/货运线路
intDFS_allpath_kh_isinclude(intbz_i,intpa_k,intkind);
//人客/货运线路判断较长路径是否完全包含较短路径
intDFS_allpath_kh_test(inta_i,intb_i);
//输出前检测判断较长路径是否完全包含较短路径
2.4源程序
/****************************************
引用系统头文件
****************************************/
#include<
stdio.h>
string.h>
stdlib.h>
ctype.h>
math.h>
io.h>
conio.h>
/****************************************
宏定义
#defineMAX_V_NUM100
#defineMAX60000
结构体定义
全局变量定义
MGraphG;
//图G
intinput_exit=0;
//退出操作
//ota最短路径存储用变量
intP[MAX_V_NUM][MAX_V_NUM];
//最短路径中间点记录
intD[MAX_V_NUM];
//到各点的最短路径
intSorder[MAX_V_NUM];
//最短路径根点由小到大排序
//路径探寻存储用变量(使用前后必须重置为0)
intpath[MAX_V_NUM];
//路径站点
intvisited[MAX_V_NUM];
//访问标志
intpath_num;
//所有路径数
intbest_l;
//目前最短的总长度
intbestl_num;
//目前总长度最短的路径途经站点个数
//客运货运路径函数用存储数组
intpath_kh[MAX_V_NUM][MAX_V_NUM];
//存储暂时满足条件的客货运路径
intpath_kh_vnum[MAX_V_NUM];
//记录每条路径途经的站点数
intpath_num_bak;
//备份所有路径数
函数声明
//欢迎界面
voidprint_fgx();
//输出独占一行的分割线
voidmap_de_arc(intbid,intfid);
//删除道路(模块函数)
主函数次主函数
intmain()
intstep=-1,choose=1;
create_map();
do
{
welcome();
printf("
请输入功能序号:
"
);
step=input_num_check(0,6);
if(input_exit==1)
{
input_exit=0;
step=-1;
choose=0;
}
else
switch(step)
{
case1:
search_vex_info();
break;
case2:
search_rantwo_short();
case3:
search_two_allpath();
case4:
map_manage();
case5:
search_kh_path();
default:
choose=0;
}
}while(choose!
=0);
printf("
\n*******************************\n您已成功退出,欢迎下次使用,再见!
\n[按任意键关闭窗口]"
getch();
}
voidwelcome()
inti;
*********************************************\n"
**\n"
*全国铁路网最佳经由系统*\n"
*<
功能列表>
*\n"
*1.站点介绍查询*\n"
*2.两站点最短路径查询*\n"
*3.两站点所有路径查询*\n"
*4.站点道路修改扩充*\n"
*5.客货运路径查询*\n"
*6.关于*\n"
*0.退出系统*\n"
共有%d个站点%d条道路[最大值MAX为%d最多%d个顶点]"
G.vexnum,G.arcnum,MAX,MAX_V_NUM);
print_fgx();
可供查询的站点:
\n"
for(i=0;
i<
G.vexnum;
i++)
printf("
【%d】%s"
G.vexs[i].id,G.vexs[i].name);
if(i%5==4&
&
i!
=0)
}
voidsearch_vex_info()
intvid;
do
请输入站点ID(e:
退出):
vid=input_num_check(0,G.vexnum-1);
if(input_exit==1)
{
system("
cls"
return;
}
print_fgx();
站点【%s】介绍:
%s"
G.vexs[vid].name,G.vexs[vid].des);
print_fgx();
}while
(1);
voidsearch_rantwo_short()
intbid,fid,i,j;
请输入起点ID(e:
bid=input_num_check(0,G.vexnum-1);
return;
请输入终点ID(e:
fid=input_num_check(0,G.vexnum-1);
input_exit=0;
system("
return;
shortest_path_ota(bid);
【%d】%s到【%d】%s的最短路径:
G.vexs[bid].id,G.vexs[bid].name,G.vexs[fid].id,G.vexs[fid].name);
for(i=0;
j=Sorder[i];
if(P[fid][j]==1)
printf("
【%d】%s->
G.vexs[j].id,G.vexs[j].name);
全程共%dkm"
D[fid]);
voidsearch_two_allpath()
intbid,fid,i;
fid=input_num_check(0,G.vexnum-1);
if(bid==fid)
终点与起点相同!
continue;
for(i=0;
MAX_V_NUM;
path[i]=0;
visited[i]=0;
path_num=0;
visited[bid]=1;
path[0]=bid;
【%d】%s到【%d】%s的所有路径:
DFS_allpath(bid,fid,0);
共找到%d条路径"
path_num);
path[i]=0;
visited[i]=0;
voidmap_manage()
intselect;
(1.新增站点2.新增线路3.修改站点4.修改线路5.删除站点6.删除线路e:
退出)\n请输入操作编号:
select=input_num_check(1,6);
system("
switch(select)
case1:
map_add_vex();
case2:
map_add_road();
case3:
map_revise_vex();
case4:
map_revise_road();
case5:
map_delete_vex();
case6:
map_delete_road();
default:
exit
(1);
voidsearch_kh_path()
intsign=0;
(1.货运2.客运e:
select=input_num_check(1,2);
search_kh_kh
(1);
case2:
search_kh_kh
(2);
default:
地图的初始化与保存
voidcreate_map()
if(access("
mapdata.mdat"
0)==0)
FILE*fp;
fp=fopen("
"
rb"
if(!
fp)
\n数据文件打开失败!
exit
(1);
fread(&
G,sizeof(MGraph),1,fp);
fclose(fp);
else
inti,j;
//站点数与道路数赋值
G.vexnum=15;
G.arcnum=20;
//站点编号赋值
G.vexs[i].id=i;
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国地质大学 数据结构 全国铁路 运输网 最佳 经由 问题 课程设计 报告