校园导游系统程序.docx

上传人:b****5 文档编号:28898123 上传时间:2023-07-20 格式:DOCX 页数:32 大小:24.04KB
下载 相关 举报
校园导游系统程序.docx_第1页
第1页 / 共32页
校园导游系统程序.docx_第2页
第2页 / 共32页
校园导游系统程序.docx_第3页
第3页 / 共32页
校园导游系统程序.docx_第4页
第4页 / 共32页
校园导游系统程序.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

校园导游系统程序.docx

《校园导游系统程序.docx》由会员分享,可在线阅读,更多相关《校园导游系统程序.docx(32页珍藏版)》请在冰豆网上搜索。

校园导游系统程序.docx

校园导游系统程序

课题五:

校园导游程序

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]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1