数据结构与算法大作业
更新时间:2023-06-11 04:31:01 阅读量: 实用文档 文档下载
校园导游资讯系统
课 程 设 计 说 明 书
课程名称: 数据结构与算法 设计题目: 院 系: 计算机科学与信息工程学院 学生姓名: 丁守亮 学 号: 专业班级:指导教师: 闫怀平
2012年 6 月 15
日
校园导游资讯系统
课 程 设 计 任 务 书
校园导游资讯系统
(6)建立校园景点平面图; (7)对(2)(3)(4)(5)(6)功能函数调用函数。 、 、 、 、 其他方面: (1) 对编写完成的程序进行上机调试; (2) 运行程序; (3) 对运行结果进行分析; (4) 撰写课程设计说明书 (5) 完成设计答辩。 参考文献阅读:[1] 严蔚敏、吴伟民.据结构(c 语言版).北京:清华大学出版社.2009 [2] 谭浩强.C 程序设计(第四版).北京:清华大学出版社.2010 [3] 严蔚敏、吴伟民.据结构题集.北京:清华大学出版社.2009
工作计划:本次课程设计时间为 2011—2012 学年度第二学期的第 17、18 周 1、第一周的第一天:小组布置设计题目;说明进度安排。 2、第一周的第二天:小组审题,查阅资料,进行设计前的必要资料准备。 3、第一周的第三天、第四天、第五天:程序编写、上机调试 4、第二周的第一天至第三天: 上机调试程序、结果分析。 5、第二周的第四天: 撰写设计报告。 6、第二周的第五天: 设计答辩及成绩评定。 任务下达日期: 任务完成日期: 2012 年 2012 年 6月 6月 4 日 15 日 学生(签名) :
指导教师(签名) :
校园导游资讯系统
校园导游程序
摘 要:随着现代旅游业的快速发展,图文声像导游方式和实地口语导游方式都已
经不能满足现阶段旅游者的需求,信息化的飞速发展造就了地理信息系统(GIS)和全球定位系统(GPS),促使消费者更多的选择自助游和自驾游等方式出行。而近年来高等院校的发展使得高校也成为了一个景点。如何让游客以最短的时间到达旅游目的地就是本文所寻求解决的问题。文章通过最短路径算法,并结合实际情况以高等院校为例采集所需要的数据,理论上使得游客可以轻松的寻找到最适合自己的旅游线路,并以此为依据合理安排自己的行程。
关键词:数据结构 图 结点 边 权 景点 路径 距离
校园导游资讯系统
目 录
1.设计背景 1
1.1课程设计目的 1 1.2题目要求 1 2.设计方案 2 2.1功能构思 2 2.2方法实现 3 3.方案实施 4 3.1基本操作 4 3.2各步操作函数模块 4 4.结果和结论 17
4.1运行结果 17 4.2结论 25 5.收获和致谢 26 6.参考文献 27 7.附件 28
校园导游资讯系统
校园导游资讯系统
1. 设计背景
1.1 课程设计目的
数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课
程,而且已成为其他理工专业的热门选修课。从课程性质上讲,数据结构是一门专业技术基础课。它的教学要求是:学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当地逻辑结构,存储结构和其相应的算法,并初步掌握算法的时间分析和空间分析的技术。另一方面,本课程的学习也是复杂程序的设计的训练过程,要求学生编写的程序结构清楚和正确易读,符合软件工程的规范。如果说高级语言程序设计的训练过程,要进行结构化的程序设计的初步训练的话,那么数据结构就要培养我们的数据抽象能力。本次课程设计的目的就是培养学生运用数据结构中基本算法进行处理现实中的问题的能力。通过本次课程设计,可以让学生更好地掌握数据结构中的各类基本算法,并运用C语言完成简单的编程,为以后更好的学习高级编程语言打下基础。
1.2题目要求
本次设计要求两人合作共同完成:
1.景点信息和路径信息保存在文本文件,景点个数不少于20个 2.查询各景点的相关信息;
3.查询图中任意两个景点间的最短路径。 4.查询图中任意两个景点间的所有路径。 5.增加、删除、更新有关景点和道路的信息。
校园导游资讯系统
2.设计方案
2.1 功能构思
2.1.1问题的分析和结构的设计思路
1) 在安阳工学院校内选取具有代表性的景点,把这些景点看作无向带权图的
各个结点,景点间的路径看作无向图的边,两景点之间的距离以各对应边上的权值表示。
2)校园咨询程序要为用户提供最佳路径查询,根据用户提供的起始景点和终端景点输出最佳的路径,此时,可以运用弗洛伊德算法函数完成最短路径的输出。
3)校园咨询程序可以用迪杰斯特拉算法完成在游客只提供起始景点的情况下,告知游客到校园内其余景点的最短路径。
4)景点信息的更新则可以在无向图中以添加、删除结点,添加、删除边以及改变各边权值表示。
2.1.2校园导游咨询程序的算法思想及设计
1)由校园各景点建立起的无向带权图,采用邻接矩阵的形式进行存储,其中点信息的存储形式如“strcpy(c.vexs[0].name ,"南门"); strcpy(c.vexs[0].introduction ," 安阳工学院正门")”所示,各边以及路径长度的则以c.arcs [i][j].adj =Infinity表示(其中i,j表示景点的编号)。
2)校园任意两景点间的最短路径问题则可以用弗洛伊德算法实现,
3)显示校园其中一个景点到其余各景点的最短路径的过程用迪杰斯特拉算法求一个结点到其余各结点的最短路径像似,因此我们可以采用迪杰斯特拉算法实现。
4)校园景点的更新,我们则可以在无向图中做出相应的表示。 2.1.3校园导游咨询程序的设计流程图:
校园导游资讯系统
2.2方法实现
2.2.1基本操作函数实现
1.建立无向图的初始化 mgraph initgraph()
2. 查找景点在图中的序号
int locatevex(mgraph c,int v)
3.求序号为m,n景点间的长度不超过8个景点的路径 void path(mgraph c, int m,int n,int k)
4.打印两景点间的景点个数不超过8的所有路径。调用2 int allpath(mgraph c)
5.用迪杰斯特拉算法,求出一个景点到其他景点间的最短路径,并打印 void shortestpath_dij(mgraph c) 6.构造图的邻接矩阵
int creatgragh(mgraph &c)
7.建图、更新信息、删除、增加结点和边 int newgraph(mgraph &c) //新建图 int enarc(mgraph&c) //增加边 int envex(mgraph&c) //增加结点 int delvex(mgraph&c) //删除结点 int delarc(mgraph&c) //删除边 8.使用FLOYD算法查询两景点间的最短路径 void shortestpath_floyd(mgraph c)
校园导游资讯系统
3. 方案实施
3.1基本操作
3.1.1完成图的各个模块以及各模块之间的调用
3.2各步操作函数模块
3.2.1定义边、点、图结构体以及整形变量
typedef struct arcell{ //边结构体 int adj; }arcell,adjmatrix[MaxVertexNum][MaxVertexNum];
typedef struct vexsinfo { //点信息结构体
int position; char name[32]; char introduction[256];
}vexsinfo;
typedef struct mgraph { //图结构体
vexsinfo vexs[MaxVertexNum]; adjmatrix arcs; int vexnum,arcnum;
校园导游资讯系统
}mgraph;
3.2.2无向图的邻接矩阵存储
mgraph initgraph()//对图初始化 {
int i=0,j=0; mgraph c;
c.vexnum =21; c.arcnum =36; for(i=0;i<c.vexnum ;i++) c.vexs[i].position =i;
strcpy(c.vexs[0].name ,"南门");//依次输入顶点信息 strcpy(c.vexs[0].introduction ," 安阳工学院正门"); strcpy(c.vexs[1].name ,"报告厅");
strcpy(c.vexs[1].introduction ,"学生聆听名人演讲的地方"); strcpy(c.vexs[2].name ,"行政楼");
strcpy(c.vexs[2].introduction ,"教务后勤办公处"); strcpy(c.vexs[3].name ,"主教楼");
strcpy(c.vexs[3].introduction ,"考研学生的自习室"); strcpy(c.vexs[4].name ,"明德湖");
strcpy(c.vexs[4].introduction ,"学生早读之处"); strcpy(c.vexs[5].name,"求索广场");
strcpy(c.vexs[5].introduction ,"因有八卦图故名求索"); strcpy(c.vexs[6].name ,"网球场");
strcpy(c.vexs[6].introduction ,"网球运动绝佳圣地"); strcpy(c.vexs[7].name,"足球场");
strcpy(c.vexs[7].introduction ,"每年大学生春季运动会在这里举办"); strcpy(c.vexs[8].name ,"宿舍楼");
strcpy(c.vexs[8].introduction ,"校内女生宿舍,离餐厅很近"); strcpy(c.vexs[9].name, "餐厅");
strcpy(c.vexs[9].introduction , "校内学生在这里就餐"); 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[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 ,"图书馆大楼,高5层"); for(i=0;i<c.vexnum ;i++)//依次输入边上的权值信息 for(j=0;j<c.vexnum ;j++)
c.arcs [i][j].adj =Infinity; //先初始化图的邻接矩阵
c.arcs[0][1].adj=100;c.arcs[0][2].adj=300;c.arcs[0][3].adj=500; c.arcs[0][4].adj=80;
c.arcs[1][7].adj=150;
c.arcs[2][3].adj=200;c.arcs[2][4].adj=200;c.arcs[2][5].adj=200; c.arcs[2][10].adj=200;
c.arcs[3][4].adj=200;c.arcs[3][5].adj=300; c.arcs[3][10].adj=200; c.arcs[4][5].adj=150; c.arcs[4][9].adj=100; c.arcs[5][10].adj=150; c.arcs[5][11].adj=100; c.arcs[6][7].adj=50; c.arcs[6][8].adj=90; c.arcs[7][8].adj=50;
c.arcs[8][9].adj=100; c.arcs[8][17].adj=150; c.arcs[9][10].adj=150; c.arcs[9][15].adj=50; c.arcs[10][11].adj=200; c.arcs[11][12].adj=50; c.arcs[12][13].adj=250;
c.arcs[13][14].adj=150; c.arcs[13][20].adj=500; c.arcs[14][16].adj=90; c.arcs[14][20].adj=500; c.arcs[15][16].adj=150;
c.arcs[16][18].adj=40; c.arcs[16][20].adj=300; c.arcs[17][18].adj=100; c.arcs[18][19].adj=100; c.arcs[19][20].adj=300;
for(i=0;i<c.vexnum ;i++) //邻接矩阵是对称矩阵,对称赋值 for(j=0;j<c.vexnum ;j++)
c.arcs[j][i].adj =c.arcs[i][j].adj ; return c; }//initgraph
3.2.3迪杰斯特拉算法求一个景点到其余各景点的最短路径
// 用迪杰斯特拉算法,求出一个景点到其他景点间的最短路径,并打印 void shortestpath_dij(mgraph c) {
int v,w,i,min,t=0,x,flag=1,v0; //vo为起始景点的编号 int final[35],d[35],p[35][35];
校园导游资讯系统
printf("请输入一个起始景点的编号:"); scanf("%d",&v0);
while(v0<0||v0>c.vexnum) {
printf("你所输入的景点编号不存在.\n"); printf("请重新输入:"); scanf("%d",&v0); }
for(v=0;v<c.vexnum ;v++) {
final[v]=0; //初始化各顶点访问标志 d[v]=c.arcs[v0][v].adj; //v0 到各顶点 v 的权值赋值给d[v] for(w=0;w<c.vexnum ;w++) p[v][w]=0;
if(d[v]<Infinity) //v0 到v 有边相连,修改p[v][v0]的值为1 {
p[v][v0]=1;
p[v][v]=1; //各顶点自己到自己要连通 } }
d[v0]=0; //自己到自己的权值设为0 final[v0]=1; //v0的访问标志设为1,v 属于 s 集
for(i=1;i<c.vexnum ;i++)//对其余c.vexnum-1个顶点w,依次求 v 到 w 的最短路径 {
min=Infinity;
for(w=0;w<c.vexnum ;w++) //在未被访问的顶点中,查找与 v0 最近的顶点v if(!final[w])
if(d[w]<min) //v0 到 w (有边)的权值<min {
v=w;
min=d[w]; }
final[v]=1; //v 的访问标志设置为1,v 属于s集
for(w=0;w<c.vexnum ;w++) //修改v0 到其余各顶点w 的最短路径权值d[w] if(!final[w]&&(min+c.arcs[v][w].adj <d[w])) //若w 不属于s,且v 到w 有边相连 {
d[w]=min+c.arcs[v][w].adj; //修改v0 到w 的权值d[w] for(x=0;x<c.vexnum ;x++) //所有v0 到v 的最短路径上的顶点x,都是v0 到w 的最短路径上的顶点
p[w][x]=p[v][x]; p[w][w]=1; }
校园导游资讯系统
for(v=0;v<c.vexnum ;v++) //输出v0 到其它顶点v 的最短路径 {
if(v!=v0)
printf("%s",c.vexs[v0].name); //输出景点v0 的景点名 for(w=0;w<c.vexnum ;w++) //对图中每个顶点w,试探w 是否是v0 到v 的最短路径上的顶点 {
if(p[v][w] && w!=v0 && w!=v)//若w 是且w 不等于v0,则输出该景点 printf("--->%s",c.vexs[w].name); }
printf("---->%s",c.vexs[v].name); printf("\n总路线长为%d米\n",d[v]); } }
3.2.4实现景点的更新
//(6) 构造图的邻接矩阵
int creatgragh(mgraph &c) //建图。以图的邻接矩阵存储图 {
int i,j,m,n; int v0,v1; int distance;
printf("请输入图的顶点数和边数: "); scanf("%d %d",&c.vexnum ,&c.arcnum );
while(c.arcnum >(c.vexnum *(c.vexnum -1)/2))//无向网的边数最多为n*(n-1)/2, {
printf("输入边数有误,请重新输入所建新图的边数:");//输入边数过多时报错 scanf("%d",&c.arcnum ); }
printf("\n**********下面请输入景点的信息:************\n");
for(i=0;i<c.vexnum ;i++) //构造顶点向量(数组) {
printf("\n请输入景点的名称:"); scanf("%s",c.vexs[i].name ); printf("\n请输入景点的简介:");
scanf("%s",c.vexs[i].introduction ); }
for(i=0;i<c.arcnum ;i++) //初始化邻接矩阵 for(j=0;j<c.arcnum ;j++)
c.arcs[i][j].adj =Infinity;
printf("\n************下面请输入图的边的信息:***********\n"); for(i=1;i<=c.arcnum ;i++) //构造邻接矩阵
校园导游资讯系统
{
printf("\n第%d条边的起点 终点 长度为:",i);//输入一条边的起点、终点及权值
scanf("%d %d %d",&v0,&v1,&distance); m=locatevex(c,v0); n=locatevex(c,v1); if(m>=0 && n>=0) {
c.arcs[m][n].adj =distance;
c.arcs[n][m].adj =c.arcs[m][n].adj ; } }
return 1; }
// (7) 更新图的部分信息。返回值: 1
int newgraph(mgraph &c) {
int changenum; //计数。用于记录要修改的对象的个数 int i,m,n,t,distance,v0,v1;
printf("\n下面请输入你要修改的景点的个数:\n"); scanf("%d",&changenum);
while(changenum<0||changenum>c.vexnum ) {
printf("\n输入错误!请重新输入"); scanf("%d",&changenum); }
for(i=0;i<changenum;i++) {
printf("\n请输入景点的编号:"); scanf("%d",&m); t=locatevex(c,m);
printf("\n请输入景点的名称:"); scanf("%s",c.vexs[t].name ); printf("\n请输入景点的简介:");
scanf("%s",c.vexs[t].introduction ); }
printf("\n下面请输入你要更新的边数"); scanf("%d",&changenum);
while(changenum<0||changenum>c.arcnum ) {
校园导游资讯系统
scanf("%d",&changenum); }
printf("\n下面请输入更新边的信息:\n"); for(i=1;i<=changenum ;i++) {
printf("\n修改的第%d条边的起点 终点 长度为:",i); scanf("%d %d %d",&v0,&v1,&distance); m=locatevex(c,v0); n=locatevex(c,v1); if(m>=0&&n>=0) {
c.arcs[m][n].adj =distance;
c.arcs[n][m].adj =c.arcs[m][n].adj ; } }
return 1; }
// (8) 增加一条边。返回值:1
int enarc(mgraph&c) {
int m,n,distance;
printf("\n请输入边的起点和终点编号,权值:"); scanf("%d %d %d",&m,&n,&distance);
while(m<0||m>c.vexnum ||n<0||n>c.vexnum ) {
printf("输入错误,请重新输入:"); scanf("%d %d",&m,&n); }
if(locatevex(c,m)<0) {
printf("此结点%d已删除",m); return 1; }
if(locatevex(c,n)<0) {
printf("此结点%d已被删除:",n); return 1; }
c.arcs[m][n].adj =distance;
c.arcs[n][m].adj =c.arcs[m][n].adj; // return 1; } 对称赋值
校园导游资讯系统
// (9) 增加一个结点。返回值:1
int envex(mgraph&c) {
int i;
printf("请输入你要增加结点的信息:"); printf("\n编号:");
scanf("%d",&c.vexs[c.vexnum ].position ); printf("名称:");
scanf("%s",c.vexs[c.vexnum ].name ); printf("简介:");
scanf("%s",c.vexs[c.vexnum ].introduction) ; c.vexnum ++;
for(i=0;i<c.vexnum;i++) //对原邻接矩阵新增加的一行及一列进行初始化 {
c.arcs [c.vexnum -1][i].adj=Infinity; //最后一行(新增的一行) c.arcs [i][c.vexnum -1].adj=Infinity; //最后一列(新增的一列) }
return 1; }
// (10) 删除图的一个顶点。返回值:1
int delvex(mgraph&c) {
int i=0,j; int m; int v;
if(c.vexnum <=0) {
printf("图中已无顶点"); return 1; }
printf("\n下面请输入你要删除的景点编号:"); scanf("%d",&v);
while(v<0||v>c.vexnum ) {
printf("\n输入错误!请重新输入"); scanf("%d",&v); }
m=locatevex(c,v); if(m<0) {
printf("此顶点 %d 已删除",v);
校园导游资讯系统
}
for(i=m;i<c.vexnum-1 ;i++)//对顶点信息所在顺序表进行删除m 点的操作 {
strcpy(c.vexs[i].name ,c.vexs [i+1].name );
strcpy(c.vexs[i].introduction ,c.vexs [i+1].introduction ); }
//对原邻接矩阵,删除该顶点到其余顶点的邻接关系。分别删除相应的行和列 for(i=m;i<c.vexnum-1 ;i++) for(j=0;j<c.vexnum ;j++) c.arcs [i][j]=c.arcs [i+1][j]; for(i=m;i<c.vexnum-1 ;i++) for(j=0;j<c.vexnum ;j++)
c.arcs [j][i]=c.arcs [j][i+1]; c.vexnum --; return 1; }
//(11) 删除图的一条边。返回值:1
int delarc(mgraph&c) {
int m,n; int v0,v1;
if(c.arcnum <=0) {
printf("图中已无边,无法删除。"); return 1; }
printf("\n下面请输入你要删除的边的起点和终点编号:"); scanf("%d %d",&v0,&v1); m=locatevex(c,v0); if(m<0) {
printf("此 %d 顶点已删除",v0); return 1; }
n=locatevex(c,v1); if(n<0) {
printf("此 %d 顶点已删除",v1); return 1; }
c.arcs [m][n].adj =Infinity; //修改邻接矩阵对应的权值 c.arcs [n][m].adj =Infinity;
校园导游资讯系统
return 1; }
3.2.4 打印图的邻接矩阵
void printmatrix(mgraph c) {
int i,j,k=0; for(i=0;i<c.vexnum ;i++) for(j=0;j<c.vexnum ;j++) {
if(c.arcs[i][j].adj ==Infinity) printf("*****"); else
printf("%4d",c.arcs[i][j].adj); k++;
if(k%c.vexnum ==0) printf("\n"); } }
3.2.5使用弗洛伊德算法求任意两景点间的最短路径 void shortestpath_floyd(mgraph c) {
int i,j,k,d[35][35],p[35][35][35]; int v,u,w;
for(v=0;v<c.vexnum ;v++) //初始化各对顶点 v,w 之间的起始距离 d[v][w] 及 路径 p[v][w][] 数组 {
for(w=0;w<c.vexnum ;w++) {
d[v][w]=c.arcs[v][w].adj; //d[v][w] 中存放 v 至 w 间初始权值 for(u=0;u<c.vexnum ;u++) //初始化最短路径 p[v][w][] 数组,第 3 个分量全部清0
p[v][w][u]=0;
if(d[v][w]<Infinity) //如果 v 至 w 间有边相连 {
p[v][w][v]=1; // v 是 v 至 w 最短路径上的顶点 p[v][w][w]=1; // w 是 v 至 w 最短路径上的顶点 } } }
for(u=0;u<c.vexnum ;u++) {
for(v=0;v<c.vexnum ;v++) for(w=0;w<c.vexnum ;w++)
校园导游资讯系统
{
d[v][w]=d[v][u]+d[u][w]; //修改 v 至 w 的最短路径长度
for(i=0;i<c.vexnum ;i++) //修改 v 至 w 的最短路径数组。 若i是v至u的最短路径上的顶点,
p[v][w][i]=p[v][u][i]||p[u][w][i]; //或i是u至w的最短路径上的顶点, 则i是v至w的最短路径上的顶点 } }
printf("\n请输入出发点和目的地编号:"); scanf("%d%d",&k,&j); printf("\n\n");
while(k<0||k>c.vexnum||j<0||j>c.vexnum) {
printf("\n你所输入的景点编号不存在!");
printf("\n请重新输入出发点和目的地编号:\n"); scanf("%d%d",&k,&j); printf("\n\n"); }
printf("%s",c.vexs[k].name ); //输出出发景点名称 for(u=0;u<c.vexnum ;u++)
if(p[k][j][u] && k!=u && j!=u) //输出最短路径上中间景点名称 printf("--->%s",c.vexs[u].name );
printf("--->%s",c.vexs[j].name ); //输出目的地景点名称 printf("\n\n\n总长为%d米\n\n\n",d[k][j]); }
3.2.6查询景点信息
void seeabout(mgraph c) {
int k;
printf("\n请输入要查询的景点编号:"); scanf("%d",&k);
while(k<0||k>c.vexnum) {
printf("\n你所输入的景点编号不存在!"); printf("\n请重新输入:"); scanf("%d",&k); }
printf("\n\n编号:%-4d\n",c.vexs[k].position ); printf("\n\n景点名称:%-10s\n",c.vexs[k].name );
printf("\n\n介绍:%-80s\n\n",c.vexs[k].introduction ); }
3.2.7查询所有景点信息
校园导游资讯系统
{
int i;
printf(" \n编号 景点名称 简介\n");
printf("__________________________________________________________\n");
for(i=0;i<c.vexnum ;i++)
printf("%-10d%-25s%-80s\n",c.vexs[i].position,c.vexs[i].name,c.vexs[i].introduction);
printf("________________________________________________________\n\n"); }
3.2.8主函数,调用各部函数 void mainwork() {
int yourchoice;
campus=initgraph();
printf("\n-----------欢迎使用校园导游程序------------\n");
printf("\n 欢迎来到安阳工学院 ! \n\n"); printf("\n 菜 单 选 择 \n\n"); printf(" 1. 学校景点介绍 2. 查看游览路线 \n"); printf(" 3. 查询景点间最短路径 4. 景点信息查询 \n");
printf(" 5. 更改图信息 6. 查询景点间可行路径 \n"); printf(" 7. 打印邻接矩阵 8. 查询校园平面图 \n"); printf( 9. 退出 \n");
printf("\n------------------------------------------------------\n"); printf("请输入你的选择:"); scanf("%d",&yourchoice);
while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6||yourchoice==7||yourchoice==8||yourchoice==9)) {
printf("输入选择不明确,请重输\n"); scanf("%d",&yourchoice); }
while(1) {
switch(yourchoice) {
case 1:system("cls"); browsecompus(campus); break; case 2:system("cls"); shortestpath_dij(campus); break; case 3:system("cls"); shortestpath_floyd(campus); break; case 4:system("cls"); seeabout(campus); break; case 5:system("cls"); changegraph(campus); break; case 6:system("cls"); allpath(campus); break; case 7:system("cls"); printmatrix(campus); break;
正在阅读:
数据结构与算法大作业06-11
年终奖方案策划员工年终奖分配方案规范文件12-27
TL980-H型电脑中频电疗仪08-09
诲人不倦02-19
《计算机组装与维护实训教程》09-02
1.3架起通往理想彼岸的桥梁06-12
陕西省西安市83中2015届高三下学期二模考试英语试题Word版含答案04-29
供应商调查问卷 - 图文03-17
寺院上供仪轨大全01-26
社区服务站工作职责02-25
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 数据结构
- 算法
- 作业
- 某厂工业循环冷却水补充水处理的工艺设计 环境工程设计基础
- 新员工岗前培训心得体会
- 01和谐师生关系的建构(一):师生关系的时代特点
- 推箱子游戏的代码)
- 城市轨道交通票务管理研究
- 人教版九年级语文下册第三单元教学设计
- 考研政治公式顺口溜记忆民主政治建设
- Photoshop实例教程照片漫画插画效果的制作-PhotoShop实例教程
- SH3009-2001 石油化工企业燃料气系统和可燃性气体排放系统设计规范
- 2010浙江地理会考试题【清晰】
- 文化传媒公司管理制度汇编
- 人们破坏环境事例
- 工程热力学的概念
- 小型软件公司如何建立自己的组织结构
- 《案例分析》全真模拟题
- 浅析成都零售企业的供应链管理
- 高温射频消融结合化疗在治疗肺部肿瘤中的临床研究
- 编译原理实验报告 词法分析
- 债券融资案例分析
- 立体几何第二讲球体精讲(教师版)