C语言课程设计之旅游景点咨询系统

2023-12-19 00:50

本文主要是介绍C语言课程设计之旅游景点咨询系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C语言课程设计之旅游景点咨询系统

1.问题描述:创建一个至少有15个点的有向网表示的某个旅游景点的导游图。顶点代表景点,类型为字符串(例如,泰山导游图:“天地广场门”,“十八盘”,“冯玉祥墓”,“桃花峪门”,“中天门”,“南天门”,“玉皇顶”等),弧表示两个景点之间可以直达,弧上的权值表示两个景点之间的路程(公里数),弧上还有到达方法的信息(有步行和索道两种)。建立一个游客咨询系统。
2.基本要求
(1)创建图的存储结构。
(2)输入两个景点名,就可以得到从一个景点到达另一个景点的所有简单路径、相应路径的路程公里数、行走的方法(每一段是步行,还是坐索道);
(3)输入两个景点名,就可以得到其最短路径,即:路程最短的行进方法;如果两者无路径可通,就得出“两景点不可达的信息”。
(4)按照题意要求独立进行设计,设计结束后按要求写出设计报告。

一、代码块:

#include<bits/stdc++.h>
/*#include<iostream>
#include<fstream>
#include<algorithm>
#include<stack>*/
using namespace std;
const int MAXVEX=50;
const int INF=0x3fffffff;
//s表示索道 w表示步行typedef struct{//边的结构int wei;//权值char way;//到达方式
}EdgeType;typedef struct{string vexs[MAXVEX];//顶点信息,string类型EdgeType arc[MAXVEX][MAXVEX];//边的信息int numVertexes,numEdges;//顶点数和边数
}MGraph;void CreateMGraph(MGraph *G)
{FILE *fp;fp=fopen("read.txt","r");int i,j,k,w;cout<<"请输入顶点数和边数"<<endl;//cin>>G->numVertexes>>G->numEdges;fscanf(fp,"%d %d",&G->numVertexes,&G->numEdges);cout<<"请输入"<<G->numVertexes<<"个景点名"<<endl;char temp[MAXVEX];for(i=0;i<G->numVertexes;++i){fscanf(fp,"%s",temp);//cin>>G->vexs[i];G->vexs[i]=temp;}//初始化邻接矩阵for(i=0;i<G->numVertexes;++i)for(j=0;j<G->numVertexes;++j)G->arc[i][j].wei=INF;cout<<"请输入"<<G->numEdges<<"条边,包括起点下标、终点下标、路程(KM)和到达方式(s表示索道 w表示步行)"<<endl;for(k=0;k<G->numEdges;++k){char ch;fscanf(fp,"%d %d %d %c",&i,&j,&w,&ch);//cin>>i>>j>>w>>ch;G->arc[i][j].wei=w;G->arc[i][j].way=ch;}cout<<endl<<"*******邻接矩阵建立完成,各景点对应的编号如下*******"<<endl<<endl;for(i=0;i<G->numVertexes;++i){cout<<"编号"<<i<<" "<<G->vexs[i]<<endl;}
}int solution[MAXVEX];//记录路线
bool vis[MAXVEX];//标记数组
int flag;//通路标记void print(MGraph G,int len)//参数为路径上的第几个点
{flag=1;int sum=0;cout<<G.vexs[solution[1]];for(int i=2;i<=len;++i){//第一个点已经打印,打印剩下的点if(G.arc[solution[i-1]][solution[i]].way=='s') cout<<" -> "<<"(索道)"<<G.vexs[solution[i]];else cout<<" -> "<<"(步行)"<<G.vexs[solution[i]];sum+=G.arc[solution[i-1]][solution[i]].wei;}cout<<endl<<"该路径总路程为"<<sum<<"KM"<<endl;cout<<endl;
}void dfs(MGraph G,int k,int loc,int e)//k为第几步,loc为当前的位置,e为目标
{solution[k]=loc;//当前顶点加入路线vis[loc]=1;//标记置为1if(loc==e) print(G,k);elsefor(int i=0;i<G.numVertexes;++i){if(vis[i]==0&&G.arc[loc][i].wei<INF) dfs(G,k+1,i,e);}vis[loc]=0;//取消标记
}void slove_allpath(MGraph G,int s,int e)//查找所有可行路径
{flag=0;//有无路径标记memset(vis,0,sizeof(vis));dfs(G,1,s,e);//从第一步起点开始if(!flag) cout<<"无可行路径!"<<endl;
}int P[MAXVEX][MAXVEX];//用于存储最短路径下标的数组
int D[MAXVEX][MAXVEX];//用于存储到各点最短路径的权值之和void ShortestPath_Dijkstra(MGraph G,int v0)//最短路求解
{int v,w,k,Min;int Final[MAXVEX];//标记,=1表示求得顶点V0至Vw的最短路径for(v=0;v<G.numVertexes;v++){//初始化数据Final[v]=0;//全部顶点初始化为未知最短路径状态D[v0][v]=G.arc[v0][v].wei;//将与V0有连线的顶点加上权值P[v0][v]=v0;//初始化路径数组pre顶点均为起始点V0}D[v0][v0]=0;//v0至v0路径为0Final[v0]=1;//v0至v0不需要求路径for(v=1;v<G.numVertexes;v++){Min=INF;//初始化最小值为INFfor(w=0;w<G.numVertexes;w++){if(!Final[w]&&D[v0][w]<Min){k=w;Min=D[v0][w];//w顶点离v0顶点更近}}Final[k]=1;//将目前找到的最近的顶点位置置为1for(w=0;w<G.numVertexes;++w){//修正当前最短路径及距离//如果经过v顶点的路径比现在这条路径的长度短的话if(!Final[w]&&(Min+G.arc[k][w].wei<D[v0][w])){D[v0][w]=Min+G.arc[k][w].wei;//修改当前路径长度P[v0][w]=k;}}}
}stack<int> xiang;//辅助栈void slove_ShortestPath(MGraph G,int s,int e)//查找最短路径
{int tempe=e;if(D[s][e]==INF) cout<<"无可行路径!"<<endl;else{//有最短路径int temp=D[s][e];xiang.push(e);//终点先进栈while(P[s][e]!=s)//根据P数组倒着找{//只要不到起点xiang.push(P[s][e]);e=P[s][e];}//cout<<"由"<<G.vexs[s]<<"到"<<G.vexs[tempe]<<"的最短路径为:"<<endl;cout<<G.vexs[s];int pre=s;while(!xiang.empty()){int top=xiang.top();if(G.arc[pre][top].way=='s') cout<<" -> "<<"(索道)"<<G.vexs[top];else cout<<" -> "<<"(步行)"<<G.vexs[top];pre=top;xiang.pop();}cout<<endl<<"该路径总路程为"<<temp<<"KM"<<endl;}cout<<endl;
}int main()
{MGraph G;CreateMGraph(&G);for(int i=0;i<G.numVertexes;++i) ShortestPath_Dijkstra(G,i);/*for(int i=0;i<G.numVertexes;++i){for(int j=0;j<G.numVertexes;++j)cout<<P[i][j]<<' ';cout<<endl;}cout<<endl;for(int i=0;i<G.numVertexes;++i){for(int j=0;j<G.numVertexes;++j)cout<<D[i][j]<<' ';cout<<endl;}*/cout<<"请输入需要查找的路径(对应的起点和终点下标),输入-1结束查找"<<endl;int s,e;while(cin>>s>>e&&(s+e)>=0){if(s==e){cout<<"您已在该景点"<<endl;continue;}cout<<"*******由"<<G.vexs[s]<<"到"<<G.vexs[e]<<"可行的路径有:*******"<<endl;slove_allpath(G,s,e);//查找所有可行路径cout<<"*******由"<<G.vexs[s]<<"到"<<G.vexs[e]<<"的最短路径为:*******"<<endl;slove_ShortestPath(G,s,e);//查找最短路径}cout<<"********************查 找 结 束********************"<<endl;return 0;
}

二、运行:
1.读入景点信息文件:
在这里插入图片描述
2.查找:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于C语言课程设计之旅游景点咨询系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

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

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

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

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

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

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

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

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

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

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

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

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

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

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

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

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