【C++课程设计】校园导游程序及通信线路设计

私信我获得论文

问题描述:
设计校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(1) 显示校园平面图(用cout显示即可)。
(2) 景点信息查询:为来访客人提供图中任意景点相关信息的查询。
(3) 任意2个景点的路径查询:为来访客人提供图中任意2个景点的问路查询,即查询任意两个景点之间的一条最短的简单路径及距离。
(4) 通信线路设计:以尽可能低的造价建造景点间的通信网络把这些景点联系在一起,每条通信线路的造价与景点间的距离成正比。给出铺设方案。

校园的平面图如下

 这些地图是我自己选的,如果想换其他的地图请参考文章【数据结构课程设计】c++实现校园导游程序及通信线路设计_c+设计校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、-CSDN博客

话不多说,上代码。这些代码是我在学期期间写的代码,可能会比较不完善,还请大家多多包涵。这里提供出代码给大家参考。

代码

#include<iostream>
#include<string>
using namespace std;
#define MAXVERNUM 10
#define MAXCOST 10000;
string names[MAXVERNUM] = { "A操场","B偏门","C图书馆","D大门","E食堂","F诚智楼","G博学楼","H创新楼","I海天楼","J明德楼" };
class EdgeNode//边结点
{
public:EdgeNode(){this->adjvex = -1;this->next = NULL;}int adjvex;//记录结点的编号EdgeNode * next;
};
class VertexNode//顶点结点
{
public:VertexNode(){this->vertex = "";this->firstedge = NULL;}string vertex;//记录结点的名字EdgeNode * firstedge;
};
class ALGraph
{
public:ALGraph(){this->Vnum = -1;this->Enum = -1;}VertexNode AdjList[MAXVERNUM];int edges[MAXVERNUM][MAXVERNUM];//记录边之间的距离int Vnum,Enum;//顶点数和边数
};
void CreateALGraph(ALGraph * G,int Vnum,int Enum)//不需要用户输入
{EdgeNode * s;G->Vnum = Vnum;G->Enum = Enum;for (int i = 0;i < G->Vnum;i++){for (int j = 0;j < G->Vnum;j++){if (i == j) G->edges[i][j] = 0;else G->edges[i][j] = INT_MAX-1;}}G->edges[0][1]=57;G->edges[0][3]=48;G->edges[0][4]=97;G->edges[1][0]=57;G->edges[2][3]=66;G->edges[3][0]=48;G->edges[3][2]=66;G->edges[3][8]=15;G->edges[3][9]=223;G->edges[4][0]=97;G->edges[4][6]=255;G->edges[5][6]=134;G->edges[5][9]=82;G->edges[6][4]=255;G->edges[6][5]=134;G->edges[6][7]=99;G->edges[7][6]=99;G->edges[8][3]=15;G->edges[8][9]=10;G->edges[9][3]=223;G->edges[9][5]=82;G->edges[9][8]=10;for (int i = 0;i <G->Vnum;i++){G->AdjList[i].vertex = names[i];G->AdjList[i].firstedge = NULL;}for (int i = 0;i < G->Vnum;i++){for (int j = 0;j < G->Vnum;j++){if (G->edges[i][j] < 500){s = new EdgeNode();s->adjvex = j;s->next = G->AdjList[i].firstedge;G->AdjList[i].firstedge = s;}}}
}
void PrintMap()
{cout << "                        《校园地图》             " << endl;cout << "============================================================" << endl;cout << "||                     A操场-----B偏门                    ||" << endl;cout << "||                      /  \\                              ||" << endl;cout << "||                     /    \\                             ||" << endl;cout << "||     C图书馆------D大门  E食堂----------\\               ||" << endl;cout << "||                 /  \\                    \\              ||" << endl;cout << "||                /    \\     F诚智楼-----G博学楼-H创新楼  ||" << endl;cout << "||               /      \\     /                           ||" << endl;cout << "||           I海天楼-----J明德楼                          ||" << endl;cout << "============================================================" << endl;
}       
void PrintMenu()
{cout << "1.景点信息查询" << endl;cout << "2.景点路径查询" << endl;cout << "3.通信线路铺设方案" << endl;cout << "0.退出系统" << endl;
}
//构建最小生成树
void Prim(ALGraph *G, int tree[MAXVERNUM], int cost[MAXVERNUM])
{int flag[MAXVERNUM] = { 0 };int i, j, k, mincost;for (i = 1;i < G->Vnum;i++){cost[i] = G->edges[0][i];tree[i] = 0;}flag[0] = 1;tree[0] = -1;k = 0;for (i = 1;i < G->Vnum;i++){mincost = MAXCOST;for (j = 1;j < G->Vnum;j++){if (flag[j] == 0 && cost[j] < mincost){mincost = cost[j];k = j;}}flag[k] = 1;for (j = 1;j < G->Vnum;j++){if (flag[j] == 0 && G->edges[k][j] < cost[j]){cost[j] = G->edges[k][j];tree[j] = k;}}}
}
//求最短路径  
void ShorttestPath(ALGraph * G, int *P, float *D,int vs,int bs)
{//vs为起始点,bs为终点int fina[MAXVERNUM];//标志数组int i,k,min,pre,j=0;int tmp;for (i = 0;i < G->Vnum;i++){D[i] = G->edges[vs][i];P[i] = vs;fina[i] = 0;}//辅助数组D记录最短路径长度,P记录路径D[vs] = 0;fina[vs] = 1;P[vs] = -1;for (i = 1;i < G->Vnum;i++){min = INT_MAX;for (k = 0;k < G->Vnum;k++){if (fina[k] == 0 && D[k] < min){j = k;min = D[k];}}fina[j] = 1;for ( k = 0;k < G->Vnum;k++){if (fina[k] == 0 && (D[j] + G->edges[j][k] < D[k])){D[k] = D[j] + G->edges[j][k];P[k] = j;}}}cout << "从您选择的起始地点到目的地的最短距离为:" << D[bs] << endl << " 距离最短的路线为  :  " << G->AdjList[bs].vertex;pre = P[bs];while (pre >= 0){cout << "→" << G->AdjList[pre].vertex;pre = P[pre];}cout << endl;
}
void Menu_One()
{char a;cout << "请选择要查询的景点(输入编号)";cin >> a;//对编号的判断while (!(int(a) >= 65 && int(a) <= 74)){cout << "您输入的该景点编号不存在,请重新输入:";cin >> a;}cout << "您所查询的地点为:" << names[a - 65] << "  该地点简介:";if (a == 'A') cout << "具有足球场、篮球场、健身房等" << endl;else if (a == 'B') cout << "学校的偏入口" << endl;else if (a == 'C') cout << "学校北侧图书馆" << endl;else if (a == 'D') cout << "学校正入口" << endl;else if (a == 'E') cout << "学校师生食堂" << endl;else if (a == 'F') cout << "公共机房" << endl;else if (a == 'G') cout << "办理学生事务处" << endl;else if (a == 'H') cout << "经管学院楼" << endl;else if (a == 'I') cout << "计算机学院楼及其他行政办公" << endl;else cout << "又称H楼,具有桌球、乒乓球、会议室、舞厅等" << endl;
}
void Menu_Two(ALGraph * G)
{int P[MAXVERNUM];float D[MAXVERNUM];char a, b;cout << "请输入您要查询的两个地点:";cin >> a >> b;while (!(int(a) >= 65 && int(a) <= 74)|| !(int(b) >= 65 && int(b) <= 74)){cout << "您输入的该景点编号不存在,请重新输入:";cin >> a >> b;}if (a < b) swap(a, b);ShorttestPath(G, P, D, a-65,b-65);
}
void Menu_Three(ALGraph *G)
{int tree[MAXVERNUM];int cost[MAXVERNUM];int total=0;for (int i = 0;i < MAXVERNUM;i++){tree[i] = 0;cost[i] = 0;}Prim(G, tree, cost);for (int i = 1;i < MAXVERNUM;i++){total += G->edges[i][tree[i]];}cout << "通信线路的铺设为:" << endl;for (int i = 1;i < MAXVERNUM;i++){cout << G->AdjList[i].vertex << "--- " << G->AdjList[tree[i]].vertex << endl;}cout << "总的路程为:" << total;
}
int main()
{//图的初始化,根据需求可更改ALGraph *myALGraph = new ALGraph();CreateALGraph(myALGraph,MAXVERNUM,22);while (true){int choice;PrintMap();PrintMenu();cin >> choice;//检测菜单输入while (choice != 1 && choice != 2 && choice != 3 && choice != 0){cout << "您输入的选项有误,请重新输入:";cin >> choice;}switch (choice){case 1:Menu_One();system("pause");system("cls");break;case 2:Menu_Two(myALGraph);system("pause");system("cls");break;case 3:Menu_Three(myALGraph);system("pause");system("cls");break;case 0:cout << "欢迎下次使用!" << endl;system("pause");exit(0);}}
}

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

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

相关文章

Docker开机自动重启及自动启动容器

Docker开机自动重启及自动启动容器 Windows开机自动重启设置容器自动启动 Windows开机自动重启 勾选 Start Docker Desktop when you sign in to your computer 设置容器自动启动 1.docker update 命令 Usage: docker update [OPTIONS] CONTAINER [CONTAINER...]Update co…

数据结构与算法-B(B-)树的简单实现

B(B-)树定义 B树&#xff08;或B-tree&#xff09;是一个在计算机科学中广泛使用的数据结构&#xff0c;它是一种自平衡的树&#xff0c;能够保持数据有序。 以下是B树的特性 每个节点最多右m个孩子&#xff0c;二叉树是B-树的特例&#xff0c;其有2个孩子。除了叶节点和根节点…

c++中从父类继承的属性在子类内存中如何显示?

目录 一、继承概念 二、示例 三、结论 一、继承概念 在C中&#xff0c;继承是面向对象编程的一个重要特性&#xff0c;它允许一个类&#xff08;称为派生类或子类&#xff09;继承另一个类&#xff08;称为基类或父类&#xff09;的成员&#xff08;包括数据成员和成员函数…

springboot + Vue前后端项目(第十七记)

项目实战第十七记 写在前面1. 个人信息1.1 Person.vue1.2 设置路由并改动Header.vue1.3 动态刷新头像1.3.1 在保存个人信息时&#xff0c;触发方法1.3.2 父组件Manage.vue1.3.3 再将user以prop方式传递给子组件Header.vue1.3.4 Header.vue使用user 1.4 效果图 2. 修改密码2.1 前…

[RK-Linux] RK3562 I2C驱动TP芯片GSL3680

TP芯片GSL3680 1、简介 GSL3680是一款电容屏多点触摸控制单芯片,其芯片内部框架图如下所示: GSL3680采用了独特的互电容感应技术,可以在1ms内测量多达192个节点,支持广泛的传感器选择,包括单层或双层ITO,玻璃或薄膜,采用了先进的抗电磁干扰信号处理技术,使其对各种干…

C++初学者指南第一步---12.引用

C初学者指南第一步—12.引用 文章目录 C初学者指南第一步---12.引用1. 功能&#xff08;和限制&#xff09;1.1 非常量引用1.2 常量引用1.3 auto引用 2.用法2.1 范围for循环中的引用2.2 常量引用的函数形参2.3 非常量引用的函数形参2.4 函数参数的选择&#xff1a;copy / const…

git拉取gitee项目到本地

git安装等不做赘述。 根据需要选择不同操作 1.只是单纯拉取个项目&#xff0c;没有后续的追踪等操作 不需要使用git init初始化本地文件夹 新建一个文件夹用于存储项目&#xff0c;右键选择 git bash here 会出现命令行窗口 如果像我一样&#xff0c;只是拉取个项目作业&…

若以框架学习(3),echarts结合后端数据展示,暂时完结。

前三天&#xff0c;参加毕业典礼&#xff0c;领毕业证&#xff0c;顿时感到空落落的失去感&#xff0c;没有工作&#xff0c;啥也没有&#xff0c;总感觉一辈子白活了。晚上ktv了一晚上&#xff0c;由于我不咋个唱歌&#xff0c;没心情&#xff0c;听哥几个唱了一晚上周杰伦&am…

Redis实战—Redis分布式锁

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于Redis的分布式锁 Redis锁代码实现 修改业务代码 分布式锁误删问题 分布式锁原子性问题 Lua脚本 编写脚本 代码优化 总结 分布式锁介绍…

express+vue在线im实现【三】

往期内容 expressvue在线im实现【一】 expressvue在线im实现【二】 本期示例 本期总结 支持各种类型的文件上传&#xff0c;常见文件类型图片&#xff0c;音频&#xff0c;视频等&#xff0c;上传时同步获取音频与视频的时长&#xff0c;以及使用上传文件的缓存路径来作为vi…

WDF驱动开发-DMA(一)

在 Windows 7 及更早版本上&#xff0c;Kernel-Mode Driver Framework (KMDF) 仅支持 (DMA) 设备的总线-主直接内存访问。 此类设备包含其自己的 DMA 控制器。 在片上系统 (SoC) 上运行Windows 8及更高版本的平台上&#xff0c;该框架还支持系统模式 DMA&#xff0c;其中多个设…

视频讲解|基于模型预测算法的含储能微网双层能量管理模型【mpc】

1 主要内容 该讲解视频对应的免费程序链接为【防骗贴】基于模型预测算法的含储能微网双层能量管理模型&#xff0c;主要做的是一个微网双层优化调度模型&#xff0c;微网聚合单元包括风电、光伏、储能以及超级电容器&#xff0c;在微网的运行成本层面考虑了电池的退化成本&…

快捷方式(lnk)--加载HTA-CS上线

免责声明:本文仅做技术交流与学习... 目录 CS: HTA文档 文件托管 借助mshta.exe突破 本地生成lnk快捷方式: 非系统图标路径不同问题: 关于lnk的上线问题: CS: HTA文档 配置监听器 有效载荷---->HTA文档--->选择监听器--->选择powershell模式----> 默认生成一…

政务大厅引导系统:AR、VR技术革新引领政务服务体验升级

一、传统政务大厅面临的普遍痛点 随着城市的发展和政务服务需求的增长&#xff0c;传统的政务大厅面临着诸多挑战和痛点&#xff1a; 信息不对称&#xff1a;政务大厅内各部门信息分散&#xff0c;群众难以快速获取全面准确的服务信息&#xff0c;导致办事效率低下。 办事流…

计算机视觉 | 基于图像处理和边缘检测算法的黄豆计数实验

目录 一、实验原理二、实验步骤1. 图像读取与预处理2. 边缘检测3. 轮廓检测4. 标记轮廓序号 三、实验结果 Hi&#xff0c;大家好&#xff0c;我是半亩花海。 本实验旨在利用 Python 和 OpenCV 库&#xff0c;通过图像处理和边缘检测算法实现黄豆图像的自动识别和计数&#xff0…

JetBrains GoLand 2024 mac/win版:高效开发,Go无止境

JetBrains GoLand 2024是一款专为Go语言开发者设计的集成开发环境(IDE)&#xff0c;为开发者带来了更加高效、智能和便捷的编程体验。 GoLand 2024 mac/win版获取 在代码编辑方面&#xff0c;GoLand 2024提供了全行代码补全功能&#xff0c;通过利用先进的深度学习模型&#x…

力扣85.最大矩形

力扣85.最大矩形 遍历所有行作为底边 做求矩形面积&#xff08;84. class Solution {public:int maximalRectangle(vector<vector<char>>& matrix) {if (matrix.empty()) return 0;int n matrix.size(),m matrix[0].size();int res0;vector<int> li…

适耳贴合的气传导耳机,带来智能生活体验,塞那Z50耳夹耳机上手

现在大家几乎每天都会用到各种AI产品&#xff0c;蓝牙耳机也是我们必不可少的装备&#xff0c;最近我发现一款很好用的分体式气传导蓝牙耳机&#xff0c;它还带有一个具备AI功能的APP端&#xff0c;大大方便了我们日常的使用。这款sanag塞那Z50耳夹耳机我用过一段时间以后&…

开发指南033-数据库兼容

元芳&#xff0c;你怎么看&#xff1f; 单一数据库自身就有一些不同处理之处&#xff0c;如果一个平台要兼容所有数据库&#xff0c;就是难上加难&#xff0c;像isnull函数各数据库就不同。 对于这类问题&#xff0c;平台采用统一自定义函数解决&#xff0c;例如上面的round函…

模式分解的概念(下)-无损连接分解的与保持函数依赖分解的定义和判断、损失分解

一、无损连接分解 1、定义 2、检验一个分解是否是无损连接分解的算法 输入与输出 输入&#xff1a; 关系模式R&#xff08;U&#xff0c;F&#xff09;&#xff0c;F是最小函数依赖集 R上的一个分解 输出&#xff1a; 判断分解是否为无损连接分解 &#xff08;1&#x…