校园导游系统程序.docx
- 文档编号:28898123
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:32
- 大小:24.04KB
校园导游系统程序.docx
《校园导游系统程序.docx》由会员分享,可在线阅读,更多相关《校园导游系统程序.docx(32页珍藏版)》请在冰豆网上搜索。
校园导游系统程序
课题五:
校园导游程序
1)问题描述
用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
2)基本要求
(1)查询各景点的相关信息;
(2)查询图中任意两个景点间的最短路径。
(3)能够将图的信息保存到文件中,并指定文件打开。
(4)增加、删除、更新有关景点和道路的信息。
附加难度:
有余力的同学可以考虑用图形界面实现寻址的过程
3)设计思想
核心数据结构定义一个图,将图保存后,对图进行面向指定节点到各个节点的最短路径的操作。
可以再文件中保存多个导游图,例如保存学校图、芜湖市图等文件。
开始时选择文件,将指定文件中的信息导入到内存的图中。
#defineInfinity1000
#defineMaxVertexNum35
#defineMAX40
#include
#include
#include
#include
#include
#include
typedefstructarcell//边的权值信息
{
intadj;//权值
}arcell,adjmatrix[MaxVertexNum][MaxVertexNum];//图的邻接矩阵类型
typedefstructvexsinfo//顶点信息
{
intposition;//景点的编号
charname[32];//景点的名称
charintroduction[256];//景点的介绍
}vexsinfo;
typedefstructmgraph//图结构信息
{
vexsinfovexs[MaxVertexNum];//顶点向量(数组)
adjmatrixarcs;//邻接矩阵
intvexnum,arcnum;//分别指定顶点数和边数
}mgraph;
//全局变量
intvisited[35];//用于标志是否已经访问过
intd[35];//用于存放权值或存储路径顶点编号
mgraphcampus;//图变量(大学校园)
//
(1)对图初始化
mgraphinitgraph()
{
inti=0,j=0;
mgraphc;
c.vexnum=28;//顶点个数
c.arcnum=39;//边的个数
for(i=0;i c.vexs[i].position=i; //依次输入顶点信息 strcpy(c.vexs[0].name,"正门: "); strcpy(c.vexs[0].introduction,"学校大门,离公交站很近""|r\n"); strcpy(c.vexs[1].name,"学校后门门: "); strcpy(c.vexs[1].introduction,"去往新区、学校班车进出口"); strcpy(c.vexs[2].name,"人文学院: "); strcpy(c.vexs[2].introduction,"人文学院办公楼的住处,楼高3层"); strcpy(c.vexs[3].name,"管理学院: "); strcpy(c.vexs[3].introduction,"MBA培训中心,楼高7层"); strcpy(c.vexs[4].name,"行政楼: "); strcpy(c.vexs[4].introduction,"行政办公大楼,楼高5层"); strcpy(c.vexs[5].name,"建设银行: "); strcpy(c.vexs[5].introduction,"学生取款处,楼高1层"); strcpy(c.vexs[6].name,"体育馆: "); strcpy(c.vexs[6].introduction,"室内各类球类运动"); strcpy(c.vexs[7].name,"外语学院: "); strcpy(c.vexs[7].introduction,"各种外语教学,楼高6层"); strcpy(c.vexs[8].name,"双馨园食堂: "); strcpy(c.vexs[8].introduction,"学生就餐地点"); strcpy(c.vexs[9].name,"博学楼: "); strcpy(c.vexs[9].introduction,"计算机科学与技术学院大楼,楼高13层"); strcpy(c.vexs[10].name,"学生宿舍: "); strcpy(c.vexs[10].introduction,"若干栋,离中山园食堂近"); strcpy(c.vexs[11].name,"中山园食堂: "); strcpy(c.vexs[11].introduction,"学生就餐处"); strcpy(c.vexs[12].name,"图书馆: "); strcpy(c.vexs[12].introduction,"历史悠久,文化气氛好"); strcpy(c.vexs[13].name,"法学楼: "); strcpy(c.vexs[13].introduction,"研修法学佳地"); strcpy(c.vexs[14].name,"贵大学生超市: "); strcpy(c.vexs[14].introduction,"买各种日用品的地方"); strcpy(c.vexs[15].name,"大礼堂: "); strcpy(c.vexs[15].introduction,"文艺演出所在地"); strcpy(c.vexs[16].name,"慎思楼(新图书馆): "); strcpy(c.vexs[16].introduction,"自习的好地方"); strcpy(c.vexs[17].name,"逸夫楼: "); strcpy(c.vexs[17].introduction,"经济学院办公楼"); strcpy(c.vexs[18].name,"文化书院: "); strcpy(c.vexs[18].introduction,"推动东西方文化交流的重要桥梁"); strcpy(c.vexs[19].name,"派出所: "); strcpy(c.vexs[19].introduction,"保卫学校安全"); strcpy(c.vexs[20].name,"贵州大学出版社: "); strcpy(c.vexs[20].introduction,"发行各种图书"); strcpy(c.vexs[21].name,"贵州大学网球场: "); strcpy(c.vexs[21].introduction,"打网球的地方"); strcpy(c.vexs[22].name,"化工学院: "); strcpy(c.vexs[22].introduction,"各种实验的研究之地"); strcpy(c.vexs[23].name,"贵州大学高等教育研究所: "); strcpy(c.vexs[23].introduction,"关于高等教育的各种研究"); strcpy(c.vexs[24].name,"花溪海洋学校: "); strcpy(c.vexs[24].introduction,"贵大内部学校"); strcpy(c.vexs[25].name,"贵州大学党校: "); strcpy(c.vexs[25].introduction,"党员学习的地方"); strcpy(c.vexs[26].name,"校医院: "); strcpy(c.vexs[26].introduction,"看小病的地方"); strcpy(c.vexs[27].name,"体育场: "); strcpy(c.vexs[27].introduction,"田径远动地点"); //依次输入边上的权值信息 for(i=0;i for(j=0;j c.arcs[i][j].adj=Infinity;//先初始化图的邻接矩阵 //部分弧长 c.arcs[0][2].adj=50;c.arcs[0][3].adj=60; c.arcs[1][4].adj=90; c.arcs[2][3].adj=60;c.arcs[2][8].adj=40; c.arcs[3][4].adj=60;c.arcs[3][6].adj=40; c.arcs[4][5].adj=70;c.arcs[4][9].adj=70;c.arcs[4][10].adj=80;c.arcs[4][17].adj=200; c.arcs[5][7].adj=70; c.arcs[6][9].adj=40; c.arcs[7][18].adj=190; c.arcs[8][11].adj=50; c.arcs[9][12].adj=40; c.arcs[10][18].adj=70; c.arcs[11][12].adj=60;c.arcs[11][14].adj=50;c.arcs[11][15].adj=50; c.arcs[12][16].adj=50; c.arcs[13][14].adj=40;c.arcs[13][22].adj=60; c.arcs[14][15].adj=50;c.arcs[14][20].adj=90; c.arcs[15][16].adj=60;c.arcs[15][21].adj=40; c.arcs[16][17].adj=60; c.arcs[17][18].adj=80; c.arcs[18][19].adj=60; c.arcs[20][21].adj=60;c.arcs[20][24].adj=80; c.arcs[22][23].adj=60;c.arcs[22][25].adj=80; c.arcs[23][24].adj=60; c.arcs[24][26].adj=100;c.arcs[24][27].adj=100; c.arcs[25][26].adj=90; c.arcs[26][27].adj=90; for(i=0;i for(j=0;j c.arcs[j][i].adj=c.arcs[i][j].adj; FILE*pFile; pFile=fopen("myfile.txt","w"); fwrite(c.vexs[0].name,2,3,pFile); fwrite(c.vexs[0].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[1].name,2,6,pFile); fwrite(c.vexs[1].introduction,2,12,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[2].name,2,5,pFile); fwrite(c.vexs[2].introduction,2,15,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[3].name,2,5,pFile); fwrite(c.vexs[3].introduction,2,10,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[4].name,2,4,pFile); fwrite(c.vexs[4].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[5].name,2,5,pFile); fwrite(c.vexs[5].introduction,2,10,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[6].name,2,4,pFile); fwrite(c.vexs[6].introduction,2,8,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[7].name,2,5,pFile); fwrite(c.vexs[7].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[8].name,2,6,pFile); fwrite(c.vexs[8].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[9].name,2,4,pFile); fwrite(c.vexs[9].introduction,2,17,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[10].name,2,5,pFile); fwrite(c.vexs[10].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[11].name,2,6,pFile); fwrite(c.vexs[11].introduction,2,5,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[12].name,2,4,pFile); fwrite(c.vexs[12].introduction,2,10,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[13].name,2,4,pFile); fwrite(c.vexs[13].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[14].name,2,7,pFile); fwrite(c.vexs[14].introduction,2,9,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[15].name,2,4,pFile); fwrite(c.vexs[15].introduction,2,7,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[16].name,2,10,pFile); fwrite(c.vexs[16].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[17].name,2,4,pFile); fwrite(c.vexs[17].introduction,2,7,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[18].name,2,5,pFile); fwrite(c.vexs[18].introduction,2,14,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[19].name,2,4,pFile); fwrite(c.vexs[19].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[20].name,2,8,pFile); fwrite(c.vexs[20].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[21].name,2,8,pFile); fwrite(c.vexs[21].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[22].name,2,5,pFile); fwrite(c.vexs[22].introduction,2,9,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[23].name,2,12,pFile); fwrite(c.vexs[23].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[24].name,2,7,pFile); fwrite(c.vexs[24].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[25].name,2,7,pFile); fwrite(c.vexs[25].introduction,2,7,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[26].name,2,4,pFile); fwrite(c.vexs[26].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[27].name,2,4,pFile); fwrite(c.vexs[27].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fclose(pFile); returnc; }//initgraph // (2)查找景点在图中的序号 intlocatevex(mgraphc,intv) { inti; for(i=0;i if(v==c.vexs[i].position) returni;//找到,返回顶点序号i return-1;//否则,返回-1 } //(3)、(4)求两景点间的所有路径 //(3)打印序号为m,n景点间的长度不超过8个景点的路径 voidpath(mgraphc,intm,intn,intk) { ints,x=0; intt=k+1;//t记载路径上下一个中间顶点在d[]数组中的下标 if(d[k]==n&&k<8)//d[k]存储路径顶点。 若d[k]是终点n且景点个数<8,则输出该路径 {//递归出口,找到一条路径 for(s=0;s printf("%s--->",c.vexs[d[s]].name);//输出该路径。 s=0时为起点m printf("%s",c.vexs[d[s]].name);//输出最后一个景点名(即顶点n的名字,此时s==k) printf("\n\n"); } else { s=0; while(s { if((c.arcs[d[k]][s].adj 顶点m到顶点s有边,且未被访问 { visited[s]=1; d[k+1]=s;//存储顶点编号s至d[k+1]中 path(c,m,n,t);//求从下标为t=k+1的第d[t]个顶点开始的路径(递归调用),同时打印出一条m至n的路径 visited[s]=0;//将找到的路径上顶点的访问标志重新设置为0,以用于试探新的路径 } s++;//试探从下一个顶点s开始是否有到终点的路径 }//endwhile }//endelse }//endpath //(4)打印两景点间的景点个数不超过8的所有路径。 调用(3) intallpath(mgraphc) { intk,i,j,m,n; printf("\n\n请输入你要查询的两个景点编号: \n\n"); scanf("%d%d",&i,&j); printf("\n\n"); m=locatevex(c,i);//调用 (2),确定该顶点是否存在。 若存在,返回该顶点编号 n=locatevex(c,j); d[0]=m;//存储路径起点m(intd[]数组是全局变量) for(k=0;k visited[k]=0; visited[m]=1;//第m个顶点访问标志设置为1 path(c,m,n,0);//调用(3)。 k=0,对应起点d[0]==m。 k为d[]数组下标 return1; } //(5)用迪杰斯特拉算法,求出一个景点到其他景点间的最短路径,并打印 voidshortestpath_dij(mgraphc) { //迪杰斯特拉算法,求从顶点v0到其余顶点的最短路经及其带权长度d[v] //若p[v][w]为1,则w是从v0到v的最短路经上的顶点 //final[v]类型用于设置访问标志 intv,w,i,min,t=0,x,flag=1,v0;//vo为起始景点的编号 intfinal[35],d[35],p[35][35]; printf("\n请输入一个起始景点的编号: "); scanf("%d",&v0); printf("\n\n"); while(v0<0||v0>c.vexnum) { printf("\n你所输入的景点编号不存在\n"); printf("请重新输入: "); scanf("%d",&v0); }//while for(v=0;v { final[v]=0;//初始化各顶点访问标志 d[v]=c.arcs[v0][v]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园 导游 系统 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)