数据结构课程设计———烟台大学导游系统

2024-01-15 11:32

本文主要是介绍数据结构课程设计———烟台大学导游系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. /******************************************************************** 
  2. *版权所有 (C)2016,lv fangzhou 
  3. *文件名称:ytu导游查询系统 
  4. *文件标识:无 
  5. *内容摘要:简单模拟地图导游系统
  6. *完成对景点信息的查询、删除、修改等功能 
  7. *其他内容:无 
  8. *当前版本:Vc++ 6.0 
  9. *作者:吕方舟 
  10. *完成日期:2016. 12. 29 
  11. *********************************************************************/  

 

一.程序代码:

 

main.cpp:

01.#define INFINITY      10000       //图的矩阵中A(i,i)记为0,若没有通路,记为INFINITY = 10000    
02.#define MAX_VERTEX_NUM     40   //最大景点数定为40    
03.#define MAX 40    
04.#include<stdlib.h>  //包含system等系统调用  
05.#include<stdio.h>    
06.#include<conio.h>  //定义了通过按键盘产生的对应操作  
07.#include<string.h>  //在使用到字符数组时需要使用  
08.#include"dt.h"  
09.  
10.//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
11.void main(void)  //主函数  
12.{  
13. system("color 3f");    
14. cmd();    
15.}    
16.//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  


 

dt.cpp:

#define INFINITY      10000       //图的矩阵中A(i,i)记为0,若没有通路,记为INFINITY = 10000  
#define MAX_VERTEX_NUM     40   //最大景点数定为40  
#define MAX 40  
#include<stdlib.h>  //包含system等系统调用
#include<stdio.h>  
#include<conio.h>  //定义了通过按键盘产生的对应操作
#include<string.h>  //在使用到字符数组时需要使用
#include"dt.h"MGraph b;  //定义一个导游图类型的全局变量 bvoid Menu()  //输出菜单主页的函数
{  printf("\n                                   烟台大学导游系统\n");  printf("                           ┏━━━━━━━━━━━━━━━━━┓\n");  printf("                           ┃   1.查看地图                     ┃\n");  printf("                           ┃   2.找最短路径                   ┃\n");  printf("                           ┃   3.查找某景点信息               ┃\n");  printf("                           ┃   4.删除一个景点及路径           ┃\n");  printf("                           ┃   5.修改景点信息                 ┃\n"); printf("                           ┃   6.退出                         ┃\n"); printf("                           ┗━━━━━━━━━━━━━━━━━┛\n");     printf("             ||----------------1.五教------------||                              \n");  printf("             ||                                  ||                              \n");  printf("             ||                                  ||                              \n");  printf("             ||                                  ||                              \n");  printf("             ||                                  ||                              \n");  printf("             ||                                  ||                              \n");  printf("         0.八景园-------------2.钟楼------------4.综合楼                         \n");  printf("            ||                      \\             ||                            \n");  printf("            ||                        \\           ||                            \n");  printf("            ||                          \\         ||                            \n");  printf("            ||                          \\         ||         6.南门             \n");  printf("            ||                            \\       ||          ||                \n");  printf("            ||                             \\      ||          ||                \n");  printf("            ||                              \\     ||          ||                \n");  printf("            ||                               \\    ||          ||                \n");  printf("            ||----------------- 3.一餐---------5.逸夫图书馆---||                 \n");  
printf("以上是路径图,请输入您的选择(1-5菜单选项): ");  
}   void cmd(void)  //控制从键盘输入按钮的函数
{  int i;  b=InitGraph(); //对全局变量导游图b用函数InitGraph()进行初始化,变成烟台大学的导游图~Menu();  scanf("%d",&i);  while(i!=7)  {  switch(i)  {  case 1:system("cls");Menu();break; //先进行一个清屏操作"cls"case 2:system("cls");ShortPath_DIJ(&b);Menu();break; case 3:system("cls");Search(&b);Menu();break;  case 4:system("cls");dele(&b);Menu();break;case 5:system("cls");change(&b);Menu();break;case 6:exit(1);break;  default:break;  }  scanf("%d",&i);  }  
} MGraph InitGraph(void)  //对图初始化,变成烟台大学的地图~
{  MGraph G;  int i,j;  G.vexnum=7;  G.arcnum=10;  for(i=0;i<G.vexnum;i++)  G.vexs[i].num=i;  strcpy(G.vexs[0].name,"八景园");  strcpy(G.vexs[0].introduction,"可以读书散步的地方");  strcpy(G.vexs[1].name,"五教");  strcpy(G.vexs[1].introduction,"地理位置超好的教学楼");  strcpy(G.vexs[2].name,"钟楼");  strcpy(G.vexs[2].introduction,"烟台大学地标建筑");  strcpy(G.vexs[3].name,"一餐");  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,"烟台大学正门");  for(i=0;i<G.vexnum;i++)  for(j=0;j<G.vexnum;j++)  {G.arcs[i][j].adj=INFINITY;  G.arcs[0][1].adj=80;  G.arcs[1][0].adj=80;  G.arcs[1][4].adj=180;  G.arcs[4][1].adj=180;  G.arcs[4][5].adj=300;  G.arcs[5][4].adj=300;  G.arcs[0][2].adj=100;  G.arcs[2][0].adj=100;  G.arcs[0][3].adj=120;  G.arcs[3][0].adj=120;G.arcs[1][6].adj=400;  G.arcs[6][1].adj=400;  G.arcs[2][4].adj=150;  G.arcs[4][2].adj=150;G.arcs[3][5].adj=250;  G.arcs[5][3].adj=250;  G.arcs[2][5].adj=350;  G.arcs[5][2].adj=350;G.arcs[3][6].adj=320;  G.arcs[6][3].adj=320;  G.arcs[6][5].adj=130;  G.arcs[5][6].adj=130;}  return G;  
}void Search(MGraph *G)//查看某个景点的相关信息  
{  int k,flag=1;  while(flag)  {  printf("请输入要查询的景点编号:");  scanf("%d",&k);  if(k<0||k>G->vexnum)  {  printf("景点编号不存在!请重新输入景点编号:");  scanf("%d",&k);  }  if(k>=0&&k<G->vexnum)  flag=0;  //跳出while结构,执行下面的输出}  printf("┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");  printf("┃编号┃景点名称        ┃简介                                                    ┃\n");  printf("┃%-4d┃%-16s┃%-56s┃\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction); printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");  }void dele(MGraph *G)//删除某景点
{int k,flag=1;  while(flag)  {  printf("请输入要删除的景点编号:");  scanf("%d",&k);  if(k<0||k>G->vexnum)  {  printf("景点编号不存在!请重新输入景点编号:");  scanf("%d",&k);  }  if(k>=0&&k<G->vexnum)  flag=0;  }  strcpy(G->vexs[k].name,"此处正在建设中……");
strcpy(G->vexs[k].introduction,"无");printf("删除成功!");} void change(MGraph *G)//修改完善某景点的基本信息
{  char m[100];int k,flag=1;  while(flag)  {  printf("请输入要修改的景点编号:");  scanf("%d",&k);  if(k<0||k>G->vexnum)  {  printf("景点编号不存在!请重新输入景点编号:");  scanf("%d",&k);  }  if(k>=0&&k<G->vexnum)  flag=0;  }printf("请输入该景点要修改的信息内容:"); scanf("%s",m);strcpy(G->vexs[k].introduction,m);printf("修改成功!"); }void ShortPath_DIJ(MGraph * G)// 用狄克斯特拉算法计算出起点任意两景点之间的最短路径(v0为起点)  
{int v;//v为其他的顶点	int v0;//vo为起点int w;//循环用,并且正好对应满足条件时顶点的编号int i;//循环用int min;//在求final外顶点的最短路径的循环结构时用来记录下最短路径int t=0;//最后输出路径时用到的参数int x;//循环用,并且正好对应满足条件时顶点的编号int flag;//一开始判断景点是否存在时用的参数int final[20];  //final为已求出顶点路径的集合int D[20]; 	//D数组用来存放从源点v0到v的目前最短路径长度int p[20][20]; //有路径时为1,没有路径时为0while(flag)  //判断该景点是否存在{  printf("请输入一个起始景点编号:");  scanf("%d",&v0);  if(v0<0 || v0>G->vexnum)  {  printf("景点编号不存在!请重新输入景点编号:");  scanf("%d",&v0);  }  if(v0>=0 && v0<G->vexnum)  flag=0;  //flag=0时不再进行while循环,继续进行下面的操作}  for(v=0;v<G->vexnum;v++)  //{  final[v]=0;  //final[]置空D[v]=G->arcs[v0][v].adj;  //距离初始化for(w=0;w<G->vexnum;w++){p[v][w]=0;}if(D[v]<INFINITY)  //当v到源点v0有路径的时候,这时除了可以直接到v0的顶点外其他顶点都不能与v0连通{p[v][v0]=1;p[v][v]=1;}  }  D[v0]=0;//源点到自己的距离为零final[v0]=1;  //源点编号v0放入final中for(i=1;i<G->vexnum;i++) //循环直到所有顶点距离源点的最短路径都求出 {  min=INFINITY;  //min置最小长度初值for(w=0;w<G->vexnum;w++) //选取不在final中且具有最小距离的顶点u if(!final[w])  //选取不在final中的顶点uif(D[w]<min)//选取具有最小距离的顶点u{v=w;min=D[w];}  final[v]=1;  //顶点u加入final中for(w=0;w<G->vexnum;w++)  //修改不在final中的顶点的距离if(!final[w] && (min+G->arcs[v][w].adj<D[w]))//根据上面的代码可知min这时代表刚刚添加到final中的顶点v到源点v0的距离,如果这个距离加上v到w的距离小于之前w到源点vo的距离……  {                                            //arcs[v][w]代表两顶点v,w之间的距离D[w]=min+G->arcs[v][w].adj;  //进行修改,修改成更短的距离               for(x=0;x<G->vexnum;x++){ p[w][x]=p[v][x];//因为w连通v,所以w可以通过v与其他所有与v连通的顶点连通}p[w][w]=1;//w自己连通自己}}  for(v=0;v<G->vexnum;v++)  //输出最短路径{  if(v0!=v)printf("%s",G->vexs[v0].name); //先输出源点v0的名字 for(w=0;w<G->vexnum;w++)  {  if(p[v][w]&&w!=v0) //如果v到w连通且w!v0printf("-->%s",G->vexs[w].name); //输出顶点w的名字 t++;  }  if(t>G->vexnum-1 && v0!=v)printf(" 总路线长%dm\n\n",D[v]); //输出v到源点vo的路径长度 }  } 

 

 

dt.h:

#define INFINITY      10000       //图的矩阵中A(i,i)记为0,若没有通路,记为INFINITY = 10000  
#define MAX_VERTEX_NUM     40   //最大景点数定为40  
#define MAX 40  
#include<stdlib.h>  //包含system等系统调用
#include<stdio.h>  
#include<conio.h>  //定义了通过按键盘产生的对应操作
#include<string.h>  //在使用到字符数组时需要使用typedef struct ArCell  //单独定义有关边的结构体
{  
int adj;    //路径长度  
}AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //边长度的矩阵typedef struct   //定义一个景点的结构体(图中顶点表示主要景点),存放景点的编号、名称、简介等信息  
{  
char name[30];  
int num;  
char introduction[100];//简介  
}infotype;  typedef struct  //定义一个导游图
{  
infotype vexs[MAX_VERTEX_NUM];//定义景点数组,每个景点包括各自的编号、名称、简介信息  
AdjMatrix arcs;  //定义边长矩阵
int vexnum,arcnum;  //定义一个导游图的(景点)顶点数和路径数(边数)
}MGraph; void cmd(void);  
MGraph InitGraph(void);//对图初始化  
void Menu(void);//创建菜单选项  
void Search(MGraph *G);//查看某个景点的信息
void change(MGraph * G);//修改景点信息
void dele(MGraph * G);//删除该景点及其相关路径  
void ShortPath_DIJ(MGraph * G);//用Dijkstra计算两个景点的最短路径


 

二:运行结果:

 

菜单界面:

 

 

查询最短路径:

 

 

查询景点信息:

 

 

删除一个景点及信息:

 

 

修改某景点信息:

 

 

退出:

 

 

 

 

 

 

 

 

这篇关于数据结构课程设计———烟台大学导游系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608745

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识