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

news2024/12/27 13:20:05

私信我获得论文

问题描述:
设计校园平面图,所含景点不少于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.coloradmin.cn/o/1553314.html

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

相关文章

C#实现身份证格式验证(自建异常实现提醒)

基本信息 中国居民身份证的格式包括18位数字&#xff0c;这些数字分别代表不同的信息&#xff1a; 第1、2位数字表示省份代码。 第3、4位数字表示城市代码。 第5、6位数字表示区县代码。 第7至14位数字表示出生年、月、日&#xff08;其中7、8、9、10位是年&#xff0c;11、12…

理发店在线预约小程序源码系统 带完整的安装代码包以及搭建教程

理发店作为人们日常生活中经常光顾的场所&#xff0c;其服务质量和预约便利性直接影响到顾客的满意度。传统的理发店预约方式往往存在效率低下、信息不透明等问题&#xff0c;无法满足现代消费者的需求。因此&#xff0c;开发一款理发店在线预约小程序源码系统&#xff0c;对于…

Zabbix6 - Centos7源码编译部署HA高可用集群手册

Zabbix6 - Centos7源码编译部署HA高可用集群手册 HA高可用集群 总所周知,在我们IT运维的圈圈中,HA高可用集群服务算是逼格最高的吧也是运维里保障力度最大的环境。 HA是HighlyAvailable缩写,是双机集群系统简称,提高可用性集群,是保证业务连续性的有效解决方案,一般有两个…

数据运营分析-详解

一、指标与指标体系 指标体系就是业务逻辑的框架,也是思考业务逻辑的第一步 案例: 老板,我负责的用户活跃,主要考察每天启动产品的注册用户数量,整体来看,每月活跃保持7.3%的增长,是因为渠道团队的拉新活动带来很多新增注册用户,占每月活跃用户的40%,新一年会继续沿…

苹果应用商店上架工具比较分析与推荐

摘要 移动应用app上架是开发者关注的重要环节&#xff0c;但常常会面临审核不通过等问题。为帮助开发者顺利完成上架工作&#xff0c;各种辅助工具应运而生。本文探讨移动应用app上架原理、常见辅助工具功能及其作用&#xff0c;最终指出合理使用工具的重要性。 引言 移动应…

CSS实现小车旅行动画实现

小车旅行动画实现 效果展示 CSS 知识点 灵活使用 background 属性下的 repeating-linear-gradient 实现路面效果灵活运用 animation 属性与 transform 实现小车和其他元素的动画效果 动画场景分析 从效果图可以看出需要实现此动画的话&#xff0c;需要position属性控制元素…

梵宁教育助力大学生技能学习全面探索

在数字化时代&#xff0c;设计、剪辑与手绘等技能已成为大学生必备的能力之一。梵宁教育&#xff0c;以其深厚的教育底蕴和前瞻的教育理念&#xff0c;为广大学子提供了一个全面学习这些技能的优质平台。本文将深入探讨梵宁教育如何助力大学生在设计、剪辑与手绘技能上的学习与…

数据中心末端配电监控产品--AMB智能母线监控/始端箱插接箱母线测温/电力智能母线/智能母线测温/母线槽测温

列头柜对比母线槽 安科瑞薛瑶瑶18701709087 ◉铺设难度大&#xff0c;工期长◉聚集温升&#xff0c;火灾隐患◉检修困难◉灵活性差 ◉列头柜占用机柜位 列头柜电缆--智能母线系统 ◉安装方便&#xff0c;工期短◉柜顶明装&#xff0c;方便检修◉散热快&#xff0c;温升低&…

Uibot6.0 (RPA财务机器人师资培训第5天 ) 报销汇总机器人案例实战

训练网站&#xff1a;泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https…

新网站收录时间是多久,新建网站多久被百度收录

对于新建的网站而言&#xff0c;被搜索引擎收录是非常重要的一步&#xff0c;它标志着网站的正式上线和对外开放。然而&#xff0c;新网站被搜索引擎收录需要一定的时间&#xff0c;而且时间长短受多种因素影响。本文将探讨新网站收录需要多长时间&#xff0c;以及新建网站多久…

安全测试体系

安全测试体系 安全测试体系安全测试定义安全测试与传统的区别安全测试常用方法安全测试常用方法 客户端脚本安全测试跨站脚本攻击&#xff08;XSS&#xff09;XSS攻击的类型XSS攻击常用的HTML标签XSS攻击步骤页面查找XSS漏洞XSS攻击防御 跨站点请求伪造&#xff08;CSRF&#x…

leetcode热题100.柱状图中最大的矩形

Problem: 84. 柱状图中最大的矩形 文章目录 题目思路复杂度Code 题目 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;hei…

2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现&#xff1a; 图形&#xff08;或图像&#xff09;在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形&#xff0c;位图则使用像素来描述图像。一般来说&#…

【ripro美化】全站美化包WordPress RiPro主题二开美化版sucaihu-childV1.9(功能集成到后台)

使用介绍 1、【宝塔】删除ripro文件&#xff0c;上传最新ripro版本&#xff0c;然后上传压缩包内的ripro里面的对应文件到ripro主题对应内覆盖&#xff08;找到对应路径单个文件去覆盖&#xff09;。 2、然后上传ripro-chlid子主题美化包到/wp-content/themes路径下 3、注意顺…

无需麻烦:电脑如何轻松管理和同步iPhone应用

轻松实现电脑对iPhone应用管理 摘要 本文介绍了如何使用克魔助手工具实现电脑对手机应用的管理操作。通过简单的步骤&#xff0c;用户可以批量操作手机应用、运行应用、查看应用日志以及安装测试IPA包&#xff0c;提高工作效率和方便管理手机应用。 引言 在日常工作中&#…

智慧公厕解决方案打造更加智能的卫生空间

一、智慧公厕方案概述 智慧公厕方案旨在解决现有公厕存在的诸多问题&#xff0c;包括民众用厕困难、环境卫生状况不佳、管理效率低下等方面。针对民众的需求和管理方面的挑战&#xff0c;智慧公厕提供了一套综合解决方案&#xff0c;包括智能导航、环境监测、资源管理等功能&a…

Day46:WEB攻防-注入工具SQLMAPTamper编写指纹修改高权限操作目录架构

目录 数据猜解-库表列数据&字典 权限操作-文件&命令&交互式 提交方法-POST&HEAD&JSON 绕过模块-Tamper脚本-使用&开发 分析拓展-代理&调试&指纹&风险&等级 知识点&#xff1a; 1、注入工具-SQLMAP-常规猜解&字典配置 2、注入…

2024.3.28学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p286-p294 继承 继承可以解决代码复用&#xff0c;让我们的编程更加靠近人类思维&#xff0c;当多个类存在相同的属性和方法时&#xff0c;可以从这些类中抽象出父类&#xff0c;在父类中定义这些…

【FedCoin: A Peer-to-Peer Payment System for Federated Learning】

在这篇论文中&#xff0c;我们提出了FedCoin&#xff0c;一个基于区块链的点对点支付系统&#xff0c;专为联邦学习设计&#xff0c;以实现基于Shapley值的实际利润分配。在FedCoin系统中&#xff0c;区块链共识实体负责计算SV&#xff0c;并且新的区块是基于“Shapley证明”&a…

6.2物联网RK3399项目开发实录-驱动开发之GPIO使用(wulianjishu666)

物联网嵌入式开发源码例程&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1B3oqq5QBhN-VmTFt9CI-7A?pwd2ihg ******************************************************************************************* GPIO 使用 简介 GPIO, 全称 General-Purpose Input/…