校园导游系统的源程序.docx
《校园导游系统的源程序.docx》由会员分享,可在线阅读,更多相关《校园导游系统的源程序.docx(20页珍藏版)》请在冰点文库上搜索。
![校园导游系统的源程序.docx](https://file1.bingdoc.com/fileroot1/2023-7/12/aaa59869-5f48-4d11-a31a-89c0ae058ae4/aaa59869-5f48-4d11-a31a-89c0ae058ae41.gif)
校园导游系统的源程序
#include
#include
#include
#include
#defineMaxSize100
#defineVISITED1
#defineNOTVISITED0
#defineInfinite1073741823
#defineMaxViewNum50/*景点个数最大50*/
#defineMaxRoad1000/*定义路径为无穷大*/
#defineN16/*目前景点个数*/
typedefstruct
{
charname[30];/*景点名称*/
charnumber[10];/*景点代号*/
charintroduce[200];/*景点介绍*/
}Elemtype;
typedefstruct
{
intnum;/*景点编号*/
Elemtypedate;/*景点信息*/
}View;/*定义景点*/
typedefstruct
{
Viewview[MaxViewNum];/*存放顶点的一维数组,数组第零单元没有用上*/
unsignedintlength[MaxViewNum][MaxViewNum];/*存放路径长度*/
intm,n;
}MGraph;
MGraphMGr;/*全局变量,定义MGr为MGraph类型*/
intshortest[MaxViewNum][MaxViewNum];/*定义全局变量存贮最小路径*/
intpath[MaxViewNum][MaxViewNum];/*定义存贮路径*/
voidinit()
{
inti,j;
MGr.view[1].num=1;
strcpy(MGr.view[1].date.name,"学校正门");
strcpy(MGr.view[1].date.number,"001");
strcpy(MGr.view[1].date.introduce,"毗邻中心大道,交通便利。
");
MGr.view[2].num=2;
strcpy(MGr.view[2].date.name,"行政楼");
strcpy(MGr.view[2].date.number,"002");
strcpy(MGr.view[2].date.introduce,"学校领导,办公主楼。
");
MGr.view[3].num=3;
strcpy(MGr.view[3].date.name,"科技楼");
strcpy(MGr.view[3].date.number,"003");
strcpy(MGr.view[3].date.introduce,"逸夫科技楼");
MGr.view[4].num=4;
strcpy(MGr.view[4].date.name,"家属院");
strcpy(MGr.view[4].date.number,"004");
strcpy(MGr.view[4].date.introduce,"兰州理工大学,教职工家属院。
");
MGr.view[5].num=5;
strcpy(MGr.view[5].date.name,"图书馆");
strcpy(MGr.view[5].date.number,"005");
strcpy(MGr.view[5].date.introduce,"历史悠久,文化积淀。
供同学安静学习的环境。
");
MGr.view[6].num=6;
strcpy(MGr.view[6].date.name,"机械基地");
strcpy(MGr.view[6].date.number,"006");
strcpy(MGr.view[6].date.introduce,"土木工程学院和机电工程学院,实习实践的地方。
");
MGr.view[7].num=7;
strcpy(MGr.view[7].date.name,"学生公寓");
strcpy(MGr.view[7].date.number,"007");
strcpy(MGr.view[7].date.introduce,"学生宿舍区,本科、研究生,以及教师公寓。
");
MGr.view[8].num=8;
strcpy(MGr.view[8].date.name,"餐厅");
strcpy(MGr.view[8].date.number,"008");
strcpy(MGr.view[8].date.introduce,"清泽、智林、风味三大餐厅,周边开水房等服务场所。
");
MGr.view[9].num=9;
strcpy(MGr.view[9].date.name,"怡情园");
strcpy(MGr.view[9].date.number,"009");
strcpy(MGr.view[9].date.introduce,"学校新修建的花园,景色优美,适合同学们晨读");
MGr.view[10].num=10;
strcpy(MGr.view[10].date.name,"体育场");
strcpy(MGr.view[10].date.number,"010");
strcpy(MGr.view[10].date.introduce,"绿茵地、活动中心。
篮球场、足球场、网球场依次,丰富课余生活。
");
MGr.view[11].num=11;
strcpy(MGr.view[11].date.name,"国际交流中心");
strcpy(MGr.view[11].date.number,"011");
strcpy(MGr.view[11].date.introduce,"外国留学生、外籍教师上课活动场所。
");
MGr.view[12].num=12;
strcpy(MGr.view[12].date.name,"流体实验室");
strcpy(MGr.view[12].date.number,"012");
strcpy(MGr.view[12].date.introduce,"兰州理工大学流体实验室,同样也是理学院研究生实验室");
MGr.view[13].num=13;
strcpy(MGr.view[13].date.name,"工大高层");
strcpy(MGr.view[13].date.number,"013");
strcpy(MGr.view[13].date.introduce,"新建工大高层,是各个院办公室所在地,同样也是各个院行政楼。
");
MGr.view[14].num=14;
strcpy(MGr.view[14].date.name,"教学楼");
strcpy(MGr.view[14].date.number,"014");
strcpy(MGr.view[14].date.introduce,"外语院,设计院等学生日常上课的地方。
");
MGr.view[15].num=15;
strcpy(MGr.view[15].date.name,"附属中学");
strcpy(MGr.view[15].date.number,"015");
strcpy(MGr.view[15].date.introduce,"兰州理工大学附属中学。
");
MGr.view[16].num=16;
strcpy(MGr.view[16].date.name,"教学北楼");
strcpy(MGr.view[16].date.number,"016");
strcpy(MGr.view[16].date.introduce,"外国留学生日常上课的地方。
");
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
MGr.length[i][j]=MaxRoad;
}
}
for(i=1;i<=N;i++)
{
shortest[i][j]=0;
}
MGr.length[1][2]=MGr.length[2][1]=30;
MGr.length[2][3]=MGr.length[3][2]=50;
MGr.length[3][4]=MGr.length[4][3]=60;
MGr.length[3][5]=MGr.length[5][3]=120;
MGr.length[5][6]=MGr.length[6][5]=20;
MGr.length[6][7]=MGr.length[7][6]=230;
MGr.length[6][9]=MGr.length[9][6]=50;
MGr.length[7][8]=MGr.length[8][7]=50;
MGr.length[8][9]=MGr.length[9][8]=230;
MGr.length[8][10]=MGr.length[10][8]=50;
MGr.length[9][11]=MGr.length[11][9]=50;
MGr.length[10][11]=MGr.length[11][10]=230;
MGr.length[11][12]=MGr.length[12][11]=60;
MGr.length[12][13]=MGr.length[13][12]=60;
MGr.length[13][14]=MGr.length[14][13]=60;
MGr.length[11][14]=MGr.length[14][11]=60;
MGr.length[16][14]=MGr.length[14][16]=80;
MGr.length[13][15]=MGr.length[15][13]=80;
MGr.length[2][16]=MGr.length[16][2]=50;
MGr.length[1][1]=MGr.length[2][2]=MGr.length[3][3]=MGr.length[4][4]=0;
MGr.length[5][5]=MGr.length[6][6]=MGr.length[7][7]=MGr.length[8][8]=0;
MGr.length[9][9]=MGr.length[10][10]=MGr.length[11][11]=MGr.length[12][12]=0;
MGr.length[13][13]=MGr.length[14][14]=MGr.length[15][15]=MGr.length[16][16]=0;
}
voidintroduce()
{
intm;
printf("请输入查询景点编号:
\n");
scanf("%d",&m);fflush(stdin);
switch(m)
{
case1:
printf("景点编号:
%s\t",MGr.view[1].date.number);
printf("景点名称:
%s\n",MGr.view[1].date.name);
printf("景点简介:
%s\n",MGr.view[1].date.introduce);
break;
case2:
printf("景点编号:
%s\t",MGr.view[2].date.number);
printf("景点名称:
%s\n",MGr.view[2].date.name);
printf("景点简介:
%s\n",MGr.view[2].date.introduce);
break;
case3:
printf("景点编号:
%s\t",MGr.view[3].date.number);
printf("景点名称:
%s\n",MGr.view[3].date.name);
printf("景点简介:
%s\n",MGr.view[3].date.introduce);
break;
case4:
printf("景点编号:
%s\t",MGr.view[4].date.number);
printf("景点名称:
%s\n",MGr.view[4].date.name);
printf("景点简介:
%s\n",MGr.view[4].date.introduce);
break;
case5:
printf("景点编号:
%s\t",MGr.view[5].date.number);
printf("景点名称:
%s\n",MGr.view[5].date.name);
printf("景点简介:
%s\n",MGr.view[5].date.introduce);
break;
case6:
printf("景点编号:
%s\t",MGr.view[6].date.number);
printf("景点名称:
%s\n",MGr.view[6].date.name);
printf("景点简介:
%s\n",MGr.view[6].date.introduce);
break;
case7:
printf("景点编号:
%s\t",MGr.view[7].date.number);
printf("景点名称:
%s\n",MGr.view[7].date.name);
printf("景点简介:
%s\n",MGr.view[7].date.introduce);
break;
case8:
printf("景点编号:
%s\t",MGr.view[8].date.number);
printf("景点名称:
%s\n",MGr.view[8].date.name);
printf("景点简介:
%s\n",MGr.view[8].date.introduce);
break;
case9:
printf("景点编号:
%s\t",MGr.view[9].date.number);
printf("景点名称:
%s\n",MGr.view[9].date.name);
printf("景点简介:
%s\n",MGr.view[9].date.introduce);
break;
case10:
printf("景点编号:
%s\t",MGr.view[10].date.number);
printf("景点名称:
%s\n",MGr.view[10].date.name);
printf("景点简介:
%s\n",MGr.view[10].date.introduce);
break;
case11:
printf("景点编号:
%s\t",MGr.view[11].date.number);
printf("景点名称:
%s\n",MGr.view[11].date.name);
printf("景点简介:
%s\n",MGr.view[11].date.introduce);
break;
case12:
printf("景点编号:
%s\t",MGr.view[12].date.number);
printf("景点名称:
%s\n",MGr.view[12].date.name);
printf("景点简介:
%s\n",MGr.view[12].date.introduce);
break;
case13:
printf("景点编号:
%s\t",MGr.view[13].date.number);
printf("景点名称:
%s\n",MGr.view[13].date.name);
printf("景点简介:
%s\n",MGr.view[13].date.introduce);
break;
case14:
printf("景点编号:
%s\t",MGr.view[14].date.number);
printf("景点名称:
%s\n",MGr.view[14].date.name);
printf("景点简介:
%s\n",MGr.view[14].date.introduce);
break;
case15:
printf("景点编号:
%s\t",MGr.view[15].date.number);
printf("景点名称:
%s\n",MGr.view[15].date.name);
printf("景点简介:
%s\n",MGr.view[15].date.introduce);
break;
case16:
printf("景点编号:
%s\t",MGr.view[16].date.number);
printf("景点名称:
%s\n",MGr.view[16].date.name);
printf("景点简介:
%s\n",MGr.view[16].date.introduce);
break;
default:
printf("输入序号错误。
\n");
break;
}
printf("\n");
}
voidfloyd()/*佛洛依德算法*/
{
inti,j,k;
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
shortest[i][j]=MGr.length[i][j];
path[i][j]=0;
}
}/*初始化数组*/
for(k=1;k<=N;k++)
{
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))
{
shortest[i][j]=shortest[i][k]+shortest[k][j];
path[i][j]=k;
path[j][i]=k;/*记录经过的路径*/
}//end_if
}
}//end_for
}
}
voiddisplay(inti,intj)
{/*打印两个景点的路径及最短路径*/
inta,b;
a=i;
b=j;
printf("您要查询的两景点间最短路径是:
\n\n");
fflush(stdin);
if(i{
printf("%d",b);
while(path[i][j]!
=0)
{
printf("<-%d",path[i][j]);
if(ij=path[i][j];
else
i=path[j][i];
}
printf("<-%d\n\n",a);
printf("%d->%d的最短路径是:
%d米。
\n\n",a,b,shortest[a][b]);
}
else
{
printf("%d",a);
while(path[i][j]!
=0)
{/*把i到j的路径上所有经过的景点按顺序打印出来*/
printf("->%d",path[i][j]);
if(ij=path[i][j];
else
i=path[j][i];
}
printf("->%d\n\n",b);
printf("%d->%d的最短路径是:
%d米。
\n\n",a,b,shortest[a][b]);
}
}/*display*/
intshortdistance()
{/*要查找的两景点的最短路径*/
inti,j;
printf("请输入要查询的两个景点的数字编号(1->16)中间用空格间隔开。
\n");
scanf("%d%d",&i,&j);
if(i>N||i<0||j>N||j<0)
{
printf("输入信息错误!
\n\n");
printf("请输入要查询的两个景点的数字编号(1->16)中间用空格间隔开。
\n");
scanf("%d%d",&i,&j);
}
else
{
floyd();
display(i,j);
}
return1;
fflush(stdin);
}/*shortestdistance*/
longintA[MaxSize+1][MaxSize+1];/*迪杰斯特拉算法*/
longintD[MaxSize+1];
longintS[MaxSize+1],P[MaxSize+1];
intsource,sink;
intstep=1;
inttop=-1;
intStack[MaxSize+1];
voidinput()
{
inti,j;
printf("\n请输入起始节点:
");
scanf("%d",&source);
printf("\n请输入结束节点:
");
scanf("%d",&sink);
for(i=1;i<=N;i++)
{
S[i]=NOTVISITED;
D[i]=MGr.length[source][i];
P[i]=source;
}
S[source]=VISITED;
D[source]=0;
}
voidPush(intvalue)
{
if(top>=MaxSize)
{
printf("没有路径存在!
\n");
exit
(1);
}
else
Stack[++top]=value;
}
intPop()
{
if(top<0)
{
printf("没有路径存在!
\n");
exit
(1);
}
returnStack[top--];
}
intminD()
{
inti,t=0;
longintminimum=Infinite;
for(i=1;i<=N;i++)
if((S[i]==NOTVISITED)&&D[i]{
minimum=D[i];
t=i;
}
returnt;
}
voidoutput_path()
{
intnode=sink;
if((sink==source)||(D[sink]==Infinite))
{
printf("\n节点%d与节点%d之间没有路径存在!
",source,sink);
return;
}
printf("\n");
while(node!
=source)
{