校园导航系统C++

制作一个简单的大学城导航系统,根据用户指定的起点和终点,求出最短路径长度以及具体路径。

项目要求:

1)程序与数据相分离,地图中的所有数据都是从文件读入,而不是写在代码中

2)最短路径算法不能调用函数库

3)菜单界面可以循环显示,每次显示前先清屏

4)输入的起点和终点若不存在,能给出相应提示并允许重新输入(有可能多次输入都不存在) 5)能够显示两个地点的简介

6)能够根据起点和终点计算出正确的最短路径长度

7)能够显示出具体的最短路径(比如:中大 -> 广外->广中医)

8)如果起点与终点之间不可达,要有相应提示。 本地图中,只有鲤鱼岗不可达,如果代码中根据起点或终点直接判断是否鲤鱼岗来得出不可达的结论,则代码不达标,必须是由最短路径算法运算后来判断是否可达。   

#include <iostream>
#include <fstream>
#include <cstdlib> 
using namespace std;const int MAX = 100;                 
int map[MAX][MAX];                 // 地点间的邻接矩阵
string name[MAX];                  //地点名称表
string intro[MAX];                 // 地点简介
int n, m;                          // 地点个数和边的个数//打开数据文件 函数 
bool read(const char* filename) {ifstream file(filename);if (!file) {return false;}file >> n >> m;                     //读入地点个数和边的个数for (int i = 1; i <= n; ++i) {      //初始化邻接矩阵for (int j = 1; j <= n; ++j) {map[i][j] = -1;}}int u, v, w;for (int i = 0; i < m; ++i) {      //建立邻接矩阵file >> u >> v >> w;map[u][v] = w;map[v][u] = w;}file.ignore();                   for (int i = 1; i <= n; ++i) { getline(file, name[i]);        //建立地点名称表}for (int i = 1; i <= n; ++i) {getline(file, intro[i]);       //读入地点简介}                                  file.close();return true;
}// 打印地点列表 函数                               
void display() {for (int i = 1; i <= n; ++i) {cout <<"      "<< i << "-" << name[i] ;if(i%4==0) cout<<endl<<endl; }                               
}//Dijkstra算法求最短路径 函数 
void dj(int start, int end, int& minDist, int path[]) {//path存储起点到各个节点的最短距离 bool visited[MAX];               //visited记录结点是否被访问过 int dist[MAX];                   //dist存储起点到各个节点的最短距离for (int i = 1; i <= n; ++i) {       visited[i] = false;          //1初始化dist[i] = INT_MAX;          }dist[start] = 0;                for (int i = 1; i <= n; ++i) {int u = -1;int minDist = INT_MAX;for (int j = 1; j <= n; ++j) {   //2在dist中选出未被访问的最小值,赋值给 u if (!visited[j] && dist[j] < minDist) {u = j;                 minDist = dist[j];}}if (u == -1) {break;}visited[u] = true;          for (int v = 1; v <= n; ++v) {  //3比较 ,更新dist if (!visited[v] && map[u][v] != -1 && dist[u] + map[u][v] < dist[v]) {dist[v] = dist[u] + map[u][v];              path[v] = u;}}}minDist = dist[end];
}// 输出具体路径的函数 
void Minpath(int start, int end, int path[]) {if (start == end) {cout << name[start];return;}Minpath(start, path[end], path); cout << " -> " << name[end];
}int main() {const char* filename = "map.txt";if (!read(filename)) {cout << "无法读取地图数据文件。" << endl;return 1;}int start, end;while (true) {system("cls");  //清屏 cout << "-------------------------广州大学城简易导航系统-----------------------" << endl;cout<<endl;display();cout<<"      0-退出"<<endl; cout << "----------------------------------------------------------------------"<<endl;cout << "请输入起点编号:";cin >> start;if (start == 0) {cout << "欢迎再次使用!" << endl;break;} while(start < 1 || start > n) {cout << "编号不存在,请重新输入"<<endl;cout << "请输入起点编号:";cin >> start;}cout << "请输入终点编号:";cin >> end;if (end == 0) {cout << "欢迎再次使用!" << endl;break;} while(end < 1 || end > n) {cout << "编号不存在,请重新输入"<<endl;cout << "请输入终点编号:";cin >> end;}cout << endl;cout << intro[start] << endl;          //输出简介 cout << endl;cout << intro[end] << endl;cout << endl;int minDist, path[MAX];dj(start, end, minDist, path);         //计算最短路径  if (minDist == INT_MAX) {cout << name[start] << " 到 " << name[end] << "的最短路径是:无法到达。" << endl;} else {cout << name[start] << " 到 " << name[end] << "的最短距离是:" << minDist <<"m"<<endl;cout<<endl;cout << "具体路径是:";Minpath(start, end, path);         //输出路径 cout << endl;}cout << "按任意键继续...";cin.ignore();cin.get();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/336872.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础—SQL—DML(数据操作语言)插入数据

一、介绍 分类全称说明DMLData Manipulation Language数据操作语言。用来对数据库表中的数据进行增删改(插入、删除、修改) 则增、删、改是三个操作也就对应着三个关键字&#xff0c;分别是&#xff1a; 添加数据&#xff1a;&#xff08; INSERT &#xff09;修改数据&#…

游戏逆向工具分析及解决方案

游戏逆向&#xff0c;是指通过各类工具对游戏进行反编译及源码分析&#xff0c;尝试分析游戏的实现逻辑的过程。这个过程需要使用解密、反编译、解压缩等技术&#xff0c;目的是还原或分析出游戏的代码逻辑及资源。 游戏逆向工具可以按照不同功能进行划分&#xff0c;如&#…

JVM的相关知识

一.JVM内存区域划分&#xff08;JVM是一个Java进程&#xff09; 一个进程运行过程中就需要重操作系统这里申请到一些内存资源 JVM也是如此&#xff0c;搞一大块内存&#xff0c;供Java代码执行时使用 JVM把这一大块内存又划分成不同的区域&#xff0c;分别代表不同的用途 各个…

Qt 5桌面APP开发实战

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 第一节&#xff1a;Qt 5桌面APP开发实战入门 Qt 5的跨平台特性 Qt 5的界面设计工具 Qt 5的…

Java基础语法规范

语法规范 public class HelloWorld{ //类名&#xff1a; 1. 首字母要大写 2. 源文件名与类名相同// 单行注释/* 多行注释除这两个之外还有文档注释。不重要* /public static void main (String[] args){ /* 1. main()⽅法是类体中的主⽅法&#xff0c;该⽅法从{开始到}结束…

商用未来何时来?软银揭示量子计算商业应用现状

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨沛贤/浪味仙 排版丨沛贤 深度好文&#xff1a;3000字丨10分钟阅读 摘要&#xff1a;软银&#xff08;SoftBank&#xff09;先进技术研究所正在积极推进量子计算商业应用&#xff0c;借助与…

在CentOS 8上卸载与安装MySQL 8的详细步骤

关键词&#xff1a;MySQL 8安装、CentOS 8、YUM源配置、卸载MySQL、MySQL残留文件删除、首次登录MySQL临时密码、服务状态检查、MySQL社区服务器 阅读建议&#xff1a;本文适合需要在CentOS 8操作系统上部署最新MySQL 8数据库的系统管理员或开发者阅读。文中步骤简洁清晰&#…

SpringBoot-世界杯足球赛网站-28567

Springboot世界杯足球赛网站 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对世界杯足球赛…

Pipecat: 创建语音对话agent的开源框架,支持多模态!

项目简介 pipecat 是用于构建语音&#xff08;和多模态&#xff09;对话代理的框架。诸如私人教练、会议助理、儿童讲故事玩具、客户支持机器人、摄入流程和尖刻的社交伙伴。 看看一些示例应用&#xff1a; 语音代理入门 您可以开始在本地计算机上运行 Pipecat&#xff0c;然…

Vue 菜单组件开发教程

在 Vue 项目中&#xff0c;我们常常需要构建各种菜单结构。下面就来详细介绍如何基于给定的代码来开发一个菜单组件。 组件部分 一、模板部分 <template> <template v-for"item in menuTree" :key"item._id"> <el-sub-menu v-if"i…

xss漏洞学习(题解)

1.简单知识点回顾 XSS允许恶意web用户将代码植入到提供给其它用户使用的页面中。 特点&#xff1a;能注入恶意的HTML/JavaScript代码到用户浏览器网址上&#xff0c;从而劫持会话 类型&#xff1a; DOM型&#xff1a;属于反射型的一种&#xff0c;利用非法输入来闭合对应的h…

胶原蛋白真的可以改善皮肤?

一、胶原蛋白与皮肤的关系 胶原蛋白&#xff0c;被誉为“骨中之骨&#xff0c;肤中之肤&#xff0c;肉中之肉”&#xff0c;是皮肤的重要组成部分。随着年龄的增长&#xff0c;人体内的胶原蛋白会逐渐流失&#xff0c;导致皮肤出现松弛、干燥、皱纹等问题。因此&#xff0c;补…

计算机tcp/ip网络通信过程

目录 &#xff08;1&#xff09;同一网段两台计算机通信过程 &#xff08;2&#xff09;不同网段的两台计算机通信过程 &#xff08;3&#xff09;目的主机收到数据包后的解包过程 &#xff08;1&#xff09;同一网段两台计算机通信过程 如果两台计算机在同一个局域网中的同…

便溏平衡的乐章:肾合指引出汗与便溏的微妙对话

平衡的乐章&#xff1a;肾合指引出汗与便溏的微妙对话 在人体的舞台上&#xff0c;汗水与大便扮演着不可或缺的角色。然而&#xff0c;当汗水如瀑布般倾泻&#xff0c;大便却变得稀软不成形&#xff0c;这背后或许隐藏着阳虚的密码。本文将带你探索这其中的奥秘&#xff0c;揭…

一个案例告诉你,MySQL如何查询今天、昨天、近7天、近30天、本月、上个月、本季度、上季度、本年、上一年数据

参考博客 mysql查询当天/昨天/近7天/近30天/本月/上个月/本季度/上季度/本年/上一年 数据 正文内容 创建测试案例&#xff08;也可直接使用附录MySQL脚本生成数据&#xff09; 1、新建测试表 CREATE TABLE example (id INT AUTO_INCREMENT PRIMARY KEY,date_column DATE,d…

C/C++开发,opencv-objdetect模块,CascadeClassifier人脸识别应用

目录 一、CascadeClassifier应用简介 1.1 objdetect模块 1.2 CascadeClassifier类 1.3 detectMultiScale函数详解 二、CascadeClassifier应用示例 2.1 模型及图片下载准备 2.2 程序代码 2.3 程序编译及运行 一、CascadeClassifier应用简介 1.1 objdetect模块 在OpenCV…

如何识别并选择正规、优质的外汇交易平台?

外汇市场的日益繁荣吸引了越来越多的投资者&#xff0c;但同时也带来了众多外汇平台的涌现。如何在这些平台中筛选出正规、可信的平台&#xff0c;成为了每位外汇交易者必须面对的首要问题。以下&#xff0c;我们将为您揭示如何鉴别外汇平台真伪的几个关键方法&#xff1a; 首先…

7个卖出信号出现,昂首资本立即盈利收场

在上篇文章中&#xff0c;我们和各位投资者讨论了如果使用匕首交易策略进行交易&#xff0c;但是如果只买进不卖出&#xff0c;是不是还是盈利不了&#xff1f;Anzo Capital昂首资本认为只有低买高卖才能盈利赚钱&#xff0c;只要发现盈利信号就要立即卖出盈利收场&#xff01;…

HTTP/超文本传输协议(Hypertext Transfer Protocol)及HTTP协议通信步骤介绍和请求、响应阶段详解;

目录 一、HTTP/超文本传输协议 特点和功能 请求-响应模型 版本和扩展 安全性和加密 二、HTTP协议通信步骤介绍 三、请求、响应阶段详解 HTTP请求 HTTP响应 示例 一、HTTP/超文本传输协议 HTTP/超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff09;是…

Spring Cache自定义序列化解决乱码问题

Spring Cache数据缓存到 Redis中的 value是乱码问题&#xff08;包含日期格式转换&#xff09;&#xff0c;主要是因为序列化方式导致的。 Spring Cache使用 Redis缓存管理器时&#xff0c;默认 value使用的是 JDK序列化值的方式&#xff0c;所以导致缓存的 value乱码的问题。 …