校园导航系统源代码.docx
《校园导航系统源代码.docx》由会员分享,可在线阅读,更多相关《校园导航系统源代码.docx(12页珍藏版)》请在冰豆网上搜索。
校园导航系统源代码
#defineINFINITY10000
#defineMAX_VERTEX_NUM40
#defineMAX40
#include
#include
#include
#include
typedefstructArCell
{
intadj;/*路径长度*/
}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedefstruct/*图中顶点表示主要景点,存放景点的编号、名称、简介等信息,*/
{
charname[30];
intnum;
charintroduction[100];/*简介*/
}infotype;
typedefstruct
{
infotypevexs[MAX_VERTEX_NUM];
AdjMatrixarcs;
intvexnum,arcnum;
}MGraph;
MGraphb;
voidcmd(void);
MGraphInitGraph(void);
voidshow1();
voidlist();
voidMenu(void);
voidShortestPath_DIJ(MGraph*G);
voidSearch(MGraph*G);
intLocateVex(MGraph*G,char*v);
/**********主函数************************/
voidmain(void)
{
system("color5f");/*修改控制台的颜色信息,改为白字蓝底的模式*/
system("modecon:
cols=140lines=130");/*设置批处理运行时窗口大小的*/
cmd();
}
/********自定义函数***************/
/*cmd函数(根据目录选择要进展的项目)*/
voidcmd(void)
{
chark;
b=InitGraph();
show1();
Menu();
while
(1)
{
scanf("\n%c",&k);
switch(k)
{
case'x':
system("cls");
show1();
Menu();
list();
ShortestPath_DIJ(&b);
printf("---------------------------------欢送您的使用--------------------------------\n");
printf("\n请您继续选择效劳:
");
break;
case'y':
system("cls");
Menu();
list();
Search(&b);
printf("---------------------------------欢送您的使用--------------------------------\n");
printf("\n请您继续选择效劳:
");
break;
case'z':
system("cls");
printf("┏━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃感使用┃\n");
printf("┃建筑术大学┃\n");
printf("┃智能导航系统┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━┛\n");
exit(0);
default:
printf("输入信息错误!
\n请输入x或y或z.\n");
break;}}
}
/*迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点*/
voidShortestPath_DIJ(MGraph*G)
{
intv,w,i,min,t=0,x,flag=1,v0,v1,have[100],k;
intfinal[20],D[20],p[23][23];
while(flag)
{
printf("请输入起始景点编号:
\n");
scanf("%d",&v0);
if(v0<0||v0>G->vexnum)
printf("景点编号不存在!
");
printf("请输入终止景点编号:
\n");
scanf("%d",&v1);
if(v1<0||v1>G->vexnum)
printf("景点编号不存在!
");
if(v0>=0&&v0vexnum&&v1>=0&&v1vexnum)
flag=0;
}
for(v=0;vvexnum;++v)
{
final[v]=0;
D[v]=G->arcs[v0][v].adj;
for(w=0;wvexnum;++w)
p[v][w]=INFINITY;
if(D[v]{
p[v][v0]=1;
p[v][v]=1;
}
}
D[v0]=0;
final[v0]=1;
have[0]=v0;
for(i=1;ivexnum;++i)
{
min=INFINITY;
for(w=0;wvexnum;++w)
if(!
final[w])
if(D[w]{
v=w;
min=D[w];
}
final[v]=1;
have[k]=v;
k++;
for(w=0;wvexnum;++w)
if(!
final[w]&&((min+(G->arcs[v][w].adj)){
D[w]=min+G->arcs[v][w].adj;
for(x=0;xvexnum;x++)
p[w][x]=p[v][x];
p[w][w]=1;
}
}
for(i=0;ivexnum;i++)
{
if(p[v1][have[i]]==1){
printf("-->%s",G->vexs[have[i]].name);}
}
if((v1-v0)==1)printf("\n路径长度:
%d\n",G->arcs[v0][v1]);
elseprintf("\n路径长度:
%d\n",D[v1]);
}//ShortestPath_DIJend
/*查找函数的建立*/
voidSearch(MGraph*G)
{
intk,flag=1;
while(flag)
{
printf("请输入要查询的景点编号:
");
scanf("%d",&k);
if(k<0||k>G->vexnum)
{
printf("景点编号不存在!
请重新输入景点编号:
");
scanf("%d",&k);
}
if(k>=0&&kvexnum)
flag=0;
}
printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃编号┃景点名称┃简介┃\n");
printf("┃%-4d┃%-16s┃%-58s┃\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction);
printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}//Searchend
voidshow1()
{printf("\t\t★★欢送使用建筑大学智能导航系统★★\n");
printf("\t\t\t建筑大学南校区简单版平面图\n\n");
printf("\t学校北门\n");
printf("\t┃\n");
printf("\t┏━━北食堂━━━━━━━━━宿舍楼1\n");
printf("\t┃┃\n");
printf("\t┃宿舍楼2\n");
printf("\t┃━━━━━━九月桥━━━━━┃\n");
printf("\t┃┃\n");
printf("\t主教楼┃\n");
printf("\t┃┃\n");
printf("\t日月广场┃\n");
printf("\t┃┃\n");
printf("\t图书馆┃\n");
printf("\t┃┃\n");
printf("\t还在建┃\n");
printf("\t┃┃\n");
printf("\t南食堂━━━━━━━━━━━━宿舍楼15\n");
printf("\t┃┃\n");
printf("\t┃┃\n");
printf("\t━━━━━━━━━━━━━━南苑超市\n");
}
voidlist()
{
printf("学校景点列表:
\n");
printf("0:
学校北门");
printf("1:
宿舍楼1");
printf("2:
宿舍楼2");
printf("3:
宿舍楼15");
printf("4:
九月桥\n");
printf("5:
主教楼");
printf("6:
图书馆");
printf("7:
日月广场");
printf("8:
体育场\n");
printf("9:
还在建");
printf("10:
南食堂");
}
/*目录函数的构建*/
voidMenu()
{
printf("\n建筑大学南校区导游图\n");
printf("┏━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃x.选择出发点和目的地┃\n");
printf("┃y.查看景点信息┃\n");
printf("┃z.退出系统┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择效劳");
}
/*MGraph函数〔图的构建〕*/
MGraphInitGraph(void)
{
MGraphG;
inti,j;
G.vexnum=17;//顶点是17个
G.arcnum=25;//弧线有25个
for(i=0;iG.vexs[i].num=i;
strcpy(G.vexs[0].name,"学校北门");
strcpy(G.vexs[0].introduction,"学校的正门,气势宏伟");
strcpy(G.vexs[1].name,"宿舍楼1");
strcpy(G.vexs[1].introduction,"睡觉的地方");
strcpy(G.vexs[2].name,"宿舍楼2");
strcpy(G.vexs[2].introduction,"睡觉的地方");
strcpy(G.vexs[3].name,"宿舍楼15");
strcpy(G.vexs[3].introduction,",,,,,,,,");
strcpy(G.vexs[4].name,"九月桥");
strcpy(G.vexs[4].introduction,"连接生活区和教学区的桥。
");
strcpy(G.vexs[5].name,"主教楼");
strcpy(G.vexs[5].introduction,"教学,开会");
strcpy(G.vexs[6].name,"图书馆");
strcpy(G.vexs[6].introduction,"安静当学霸的地方");
strcpy(G.vexs[7].name,"日月广场");
strcpy(G.vexs[7].introduction,"有漂亮喷泉的广场");
strcpy(G.vexs[8].name,"体育场");
strcpy(G.vexs[8].introduction,"运动健身的地方");
strcpy(G.vexs[9].name,"还在建");
strcpy(G.vexs[9].introduction,"学校新修的实验楼,灰常高大上");
strcpy(G.vexs[10].name,"南食堂");
strcpy(G.vexs[10].introduction,"不好吃");
for(i=0;ifor(j=0;jG.arcs[i][j].adj=INFINITY;
G.arcs[0][1].adj=50;
G.arcs[1][2].adj=15;
G.arcs[1][3].adj=40;
G.arcs[2][3].adj=30;
G.arcs[0][3].adj=90;
G.arcs[3][4].adj=30;
G.arcs[4][9].adj=1000;
G.arcs[4][5].adj=20;
G.arcs[5][6].adj=10;
G.arcs[6][7].adj=8;
G.arcs[6][8].adj=12;
G.arcs[7][8].adj=7;
G.arcs[0][9].adj=30;
G.arcs[9][10].adj=500;
G.arcs[10][11].adj=25;
G.arcs[11][12].adj=8;
G.arcs[12][13].adj=5;
G.arcs[13][14].adj=10;
G.arcs[12][14].adj=10;
G.arcs[14][15].adj=150;
G.arcs[15][16].adj=3;
G.arcs[5][15].adj=150;
G.arcs[4][15].adj=30;
G.arcs[1][11].adj=300;
G.arcs[8][14].adj=40;
for(i=0;ifor(j=0;jG.arcs[j][i].adj=G.arcs[i][j].adj;
returnG;
}//InitGraphend