中国道路交通网络信息查询系统.docx
《中国道路交通网络信息查询系统.docx》由会员分享,可在线阅读,更多相关《中国道路交通网络信息查询系统.docx(36页珍藏版)》请在冰点文库上搜索。
中国道路交通网络信息查询系统
中国道路交通网络信息查询系统
【问题描述】
出于不同的目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
【系统要求】
(1)提供对城市信息进行编辑(如:
添加或删除)的功能。
(2)城市之间有两种交通工具:
火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:
最快到达或最省钱到达。
全程只考虑一种交通工具;
(4)旅途中耗费的总时间应该包括中转站的等候时间;
(5)咨询以用户和计算机的对话方式进行。
由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:
最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
【程序结构图】
【算法分析】
1.新建数据
voidcreat_data1()//新建数据
{
inti;
printf("请输入添加火车个数:
");
scanf("%d",&t);
for(i=1;i<=t;i++)
{
printf("请输入添加火车列次:
");
scanf("%s",hc[i].hnum);printf("\n");
printf("\n请输入始站:
");
scanf("%s",hc[i].kname);printf("\n");
printf("请输入终站:
");
scanf("%s",hc[i].dname);printf("\n");
printf("请输入开车时间:
");
scanf("%s",hc[i].ktime);printf("\n");
printf("请输入到站时间:
");
scanf("%s",hc[i].dtime);printf("\n");
printf("请输入经历时间:
");
scanf("%s",hc[i].ltime);printf("\n");
}
print();
}
2.添加数据
voidadd1()//添加数据
{
charch;
do
{
printf("请输入添加火车列次:
");
scanf("%s",hc[t+1].hnum);printf("\n");
printf("\n请输入始站:
");
scanf("%s",hc[t+1].kname);printf("\n");
printf("请输入终站:
");
scanf("%s",hc[t+1].dname);printf("\n");
printf("请输入开车时间:
");
scanf("%s",hc[t+1].ktime);printf("\n");
printf("请输入到站时间:
");
scanf("%s",hc[t+1].dtime);printf("\n");
printf("请输入经历时间:
");
scanf("%s",hc[t+1].ltime);printf("\n");
t++;
printf("是否继续添加y/n:
");
getchar();
ch=getchar();
printf("\n");
}while(ch=='y');
print();
}
3.删除数据
voiddelet1()//删除数据
{
charnum1[10];
inti,j,count=0;
printf("输入想要删除的火车列次");
scanf("%s",num1);
for(i=1;i<=t;i++)
if(strcmp(num1,hc[i].hnum)==0)
{
for(j=i;jhc[j]=hc[j+1];
count++;
t--;
}
if(count==0)printf("没有列车信息!
");
elseprint();
}
4.迪杰斯特拉算法
voidShortwstPath(intnum)/*迪杰斯特拉算法最短路径函数*/
{
intv,w,i,t;
intfinal[25];
intmin;
for(v=0;v<25;++v)/*初始化*/
{
final[v]=0;/*标志数组初始化*/
D[v]=G.arcs[num][v].adj;
for(w=0;w<25;++w)
P[v][w]=0;/*设空路径*/
if(D[v]<20000)/*v,v0间有边存在*/
{
P[v][num]=1;
P[v][v]=1;/*到v的最短路径上包含v0及v*/
}/*if*/
}
D[num]=0;
final[num]=1;/*初始化,v0顶点属于B集*/
/*开始主循环,每次求得v0到某个v顶点的最短路径,并加v到B集*/
for(i=0;i<25;++i)/*其余G.vexnum-1各顶点*/
{
min=20000;
for(w=0;w<25;++w)
if(!
final[w])/*w顶点在V-S中*/
if(D[w]final[v]=1;/*离v0顶点最近的v加入B*/
for(w=0;w<25;++w)/*更新当前最短路径及距离*/
if(!
final[w]&&((min+G.arcs[v][w].adj){
D[w]=min+G.arcs[v][w].adj;/*修改D和P数组*/
for(t=0;t<25;t++)
P[w][t]=P[v][t];
P[w][w]=1;
}/*if*/
}/*for*/
}
【程序测试】
建立如下图所示的全国交通图:
0.哈尔滨1.长春2.沈阳3.大连4.天津5.北京6.徐州7.呼和浩特8.兰州9.乌鲁木齐10.西宁11.西安12.郑州13.上海14.南昌15.福州16.株洲17.武汉18.广州19.深圳20.柳州21.贵阳22.南宁23.成都24.昆明
测试结果截图:
【源代码】
#include"string.h"
#include"stdio.h"
structhcar
{
charhnum[10];
charkname[10];
chardname[10];
charktime[10];
chardtime[10];
charltime[10];
}hc[60]={{"k89","哈尔滨","长春","1:
00","3:
00","2"},
{"k89","长春","哈尔滨","1:
00","3:
00","2"},
{"u78","长春","沈阳","3:
30","6:
00","2.5"},
{"u78","沈阳","长春","3:
30","6:
00","2.5"},
{"j67","沈阳","大连","6:
30","9:
00","2.5"},
{"j67","大连","沈阳","6:
30","9:
00","2.5"},
{"v78","沈阳","天津","9:
30","14:
00","4.5"},
{"v78","天津","沈阳","9:
30","14:
00","4.5"},
{"g67","天津","北京","14:
30","16:
00","1.5"},
{"g67","北京","天津","14:
30","16:
00","1.5"},
{"f67","北京","呼和浩特","16:
30","23:
00","6.5"},
{"f67","呼和浩特","北京","16:
30","23:
00","6.5"},
{"j56","呼和浩特","兰州","1:
00","3:
00","2"},
{"j56","兰州","呼和浩特","1:
00","3:
00","2"},
{"v67","兰州","乌鲁木齐","1:
00","3:
00","2"},
{"v67","乌鲁木齐","兰州","1:
00","3:
00","2"},
{"f46","兰州","西宁","1:
00","3:
00","2"},
{"f46","西宁","兰州","1:
00","3:
00","2"},
{"d49","天津","徐州","1:
00","3:
00","2"},
{"d49","徐州","天津","1:
00","3:
00","2"},
{"c44","徐州","郑州","1:
00","3:
00","2"},
{"c44","郑州","徐州","1:
00","3:
00","2"},
{"h47","郑州","北京","1:
00","3:
00","2"},
{"h47","北京","郑州","1:
00","3:
00","2"},
{"d46","郑州","西安","1:
00","3:
00","2"},
{"d46","西安","郑州","1:
00","3:
00","2"},
{"v46","西安","兰州","1:
00","3:
00","2"},
{"v46","兰州","西安","1:
00","3:
00","2"},
{"s45","徐州","上海","1:
00","3:
00","2"},
{"s45","上海","徐州","1:
00","3:
00","2"},
{"t84","上海","南昌","1:
00","3:
00","2"},
{"t84","南昌","上海","1:
00","3:
00","2"},
{"f43","南昌","株洲","1:
00","3:
00","2"},
{"f43","株洲","南昌","1:
00","3:
00","2"},
{"i45","株洲","武汉","1:
00","3:
00","2"},
{"i45","武汉","株洲","1:
00","3:
00","2"},
{"d53","武汉","郑州","1:
00","3:
00","2"},
{"d53","郑州","武汉","1:
00","3:
00","2"},
{"f67","株洲","广州","1:
00","3:
00","2"},
{"f67","广州","株洲","1:
00","3:
00","2"},
{"h76","广州","深圳","1:
00","3:
00","2"},
{"h76","深圳","广州","1:
00","3:
00","2"},
{"s45","株洲","贵阳","1:
00","3:
00","2"},
{"s45","贵阳","株洲","1:
00","3:
00","2"},
{"o56","株洲","柳州","1:
00","3:
00","2"},
{"o56","柳州","株洲","1:
00","3:
00","2"},
{"d65","贵阳","柳州","1:
00","3:
00","2"},
{"d65","柳州","贵阳","1:
00","3:
00","2"},
{"r44","南宁","柳州","1:
00","3:
00","2"},
{"r44","柳州","南宁","1:
00","3:
00","2"},
{"f56","贵阳","成都","1:
00","3:
00","2"},
{"f56","成都","贵阳","1:
00","3:
00","2"},
{"g06","西安","成都","1:
00","3:
00","2"},
{"g06","成都","西安","1:
00","3:
00","2"},
{"d97","贵阳","昆明","1:
00","3:
00","2"},
{"d97","昆明","贵阳","1:
00","3:
00","2"},
{"d67","成都","昆明","1:
00","3:
00","2"},
{"d67","昆明","成都","1:
00","3:
00","2"}};
structplane
{
charpnum[10];
charkname[10];
chardname[10];
charktime[10];
chardtime[10];
charltime[10];
}pl[60]={{"k89","哈尔滨","长春","1:
00","3:
00","2"},
{"k89","长春","哈尔滨","1:
00","3:
00","2"},
{"u78","长春","沈阳","3:
30","6:
00","2.5"},
{"u78","沈阳","长春","3:
30","6:
00","2.5"},
{"j67","沈阳","大连","6:
30","9:
00","2.5"},
{"j67","大连","沈阳","6:
30","9:
00","2.5"},
{"v78","沈阳","天津","9:
30","14:
00","4.5"},
{"v78","天津","沈阳","9:
30","14:
00","4.5"},
{"g67","天津","北京","14:
30","16:
00","1.5"},
{"g67","北京","天津","14:
30","16:
00","1.5"},
{"f67","北京","呼和浩特","16:
30","23:
00","6.5"},
{"f67","呼和浩特","北京","16:
30","23:
00","6.5"},
{"j56","呼和浩特","兰州","1:
00","3:
00","2"},
{"j56","兰州","呼和浩特","1:
00","3:
00","2"},
{"v67","兰州","乌鲁木齐","1:
00","3:
00","2"},
{"v67","乌鲁木齐","兰州","1:
00","3:
00","2"},
{"f46","兰州","西宁","1:
00","3:
00","2"},
{"f46","西宁","兰州","1:
00","3:
00","2"},
{"d49","天津","徐州","1:
00","3:
00","2"},
{"d49","徐州","天津","1:
00","3:
00","2"},
{"c44","徐州","郑州","1:
00","3:
00","2"},
{"c44","郑州","徐州","1:
00","3:
00","2"},
{"h47","郑州","北京","1:
00","3:
00","2"},
{"h47","北京","郑州","1:
00","3:
00","2"},
{"d46","郑州","西安","1:
00","3:
00","2"},
{"d46","西安","郑州","1:
00","3:
00","2"},
{"v46","西安","兰州","1:
00","3:
00","2"},
{"v46","兰州","西安","1:
00","3:
00","2"},
{"s45","徐州","上海","1:
00","3:
00","2"},
{"s45","上海","徐州","1:
00","3:
00","2"},
{"t84","上海","南昌","1:
00","3:
00","2"},
{"t84","南昌","上海","1:
00","3:
00","2"},
{"f43","南昌","株洲","1:
00","3:
00","2"},
{"f43","株洲","南昌","1:
00","3:
00","2"},
{"i45","株洲","武汉","1:
00","3:
00","2"},
{"i45","武汉","株洲","1:
00","3:
00","2"},
{"d53","武汉","郑州","1:
00","3:
00","2"},
{"d53","郑州","武汉","1:
00","3:
00","2"},
{"f67","株洲","广州","1:
00","3:
00","2"},
{"f67","广州","株洲","1:
00","3:
00","2"},
{"h76","广州","深圳","1:
00","3:
00","2"},
{"h76","深圳","广州","1:
00","3:
00","2"},
{"s45","株洲","贵阳","1:
00","3:
00","2"},
{"s45","贵阳","株洲","1:
00","3:
00","2"},
{"o56","株洲","柳州","1:
00","3:
00","2"},
{"o56","柳州","株洲","1:
00","3:
00","2"},
{"d65","贵阳","柳州","1:
00","3:
00","2"},
{"d65","柳州","贵阳","1:
00","3:
00","2"},
{"r44","南宁","柳州","1:
00","3:
00","2"},
{"r44","柳州","南宁","1:
00","3:
00","2"},
{"f56","贵阳","成都","1:
00","3:
00","2"},
{"f56","成都","贵阳","1:
00","3:
00","2"},
{"g06","西安","成都","1:
00","3:
00","2"},
{"g06","成都","西安","1:
00","3:
00","2"},
{"d97","贵阳","昆明","1:
00","3:
00","2"},
{"d97","昆明","贵阳","1:
00","3:
00","2"},
{"d67","成都","昆明","1:
00","3:
00","2"},
{"d67","昆明","成都","1:
00","3:
00","2"}};;
intt;//全局变量
typedefstructArcCell{
intadj;
char*info;
}ArcCell;/*定义边的类型*/
typedefstructVertexType{
intnumber;
char*place;
}VertexType;/*定义顶点的类型*/
typedefstruct{
VertexTypevex[25];
ArcCellarcs[25][25];
intvexnum,arcnum;
}MGraph;/*定义图的类型*/
MGraphG;/*把图定义为全局变量*/
char*sa[30]={"a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a","a",
"a","a","a","a","a","a","a","a","a","a"};
intP[25][25];
longintD[25];
voidprint()
{
intn;
voidprinth();
voidprintp();
voidprint1();
voidprint2();
do{
printf("\t\t\t时刻表\n");
printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t\t\t1.火车时刻表\n");
printf("\t\t\t2.飞机时刻表\n");
printf("\t\t\t3.退出\n");
printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("请输入序号选择相应操作:
");
scanf("%d",&n);
switch(n)
{
case1:
print1();printh();break;
case2:
print2();printp();break;
case3:
printf("欢迎使用\n");break;
default:
printf("输入错误");
}
}while(n!
=3);
}
voidprinth()
{
intn;
voidcreat_data1();
voidadd1();
voiddelet1();
do{
printf("\t\t\t火车时刻表\n");
printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t\t\t1.新建数据\n");
printf("\t\t\t2.添加\n");
printf("\t\t\t3.删除\n");
printf("\t\t\t4.退出\n");
printf("\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("请输入序号选择相应操作:
");
scanf("%d",&n);
switch(n)
{
case1:
creat_data1();break;
case2:
add1();break;
case3:
delet1();break;
case4:
printf("欢迎使用\n");break;