C/C++校园导航图的实现

课程设计题目2——校园导航图的实现
一、设计内容
(1)设计一个学校的校园平面图,所选结点不少于30个。以图中顶点表示校园各景点,存放景点名称、代号、简介等信息:以边表示路径,存放路径长度等相关信息。
(2)为来往客人提供图中任意景点相关信息的查询。
(3)为来往客人提供图中任意景点的问路查询,即任意2个景点间的最短路径,给出具体路径和路径长度。
二、设计要求
(1)除了完成基本功能外,最好能提供实时路径查询,例如某条路径的临时关闭(需在程序中实现)后的最短路径的计算。
(2)提交设计报告,报告包括代码、设计思路〔流程图)和实现界面截图等。

设计思想

程序需要先构建邻接矩阵,将读入的顶点和边的信息存入邻接矩阵(Adjacency Matrices),然后通过迪杰斯特拉(Dijkstra)算法求两点之间的最短路径。

部分代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>/*顶点属性*/
typedef struct _tVertex {char name[256];        /*属性名称*/char description[1024]; /*属性描述*/
} Vertex, * pVertex;/*顶点列表*/
typedef struct _tVertexList {int len;       /*表长度*/pVertex data;    /*表元素*/
} VertexList, * pVertexList;/*权值*/
typedef unsigned int WEIGHT, * pWEIGHT;/*邻接矩阵*/
typedef struct _tAdjacentMatrix {int size;      /*矩阵顶点个数*/WEIGHT* data; /*矩阵权值元素*/
} AdjacentMatrix, * pAdjacentMatrix;/*图结构*/
typedef struct _tGraph {VertexList vertexes;    /*顶点描述信息*/AdjacentMatrix adjmatrix; /*顶点连接关系*/
} Graph, * pGraph;enum {VISIT_STATE_VOID,   /*未标记*/VISIT_STATE_MARK /*已标记*/
};/*顶点被访问标识*/
typedef unsigned char VISIT, * pVISIT;/*Dijkstra算法需要用到的数据结构*/
typedef struct _tDijkstra {int len;pVISIT vis;pWEIGHT dis;int* pre;
} Dijkstra, * pDijkstra;#define INFINITELY_GREAT ~0U /*无穷大*//*创建顶点列表*/
void generateVertexList(pVertexList list, int vertexes) {list->len = vertexes;list->data = (pVertex)malloc(sizeof(Vertex) * list->len);memset(list->data, 0U, sizeof(Vertex) * list->len);
}/*创建邻接矩阵*/
void generateAdjacentMatrix(pAdjacentMatrix adjmatrix, int vertexes) {adjmatrix->size = vertexes;adjmatrix->data = (pWEIGHT)malloc(sizeof(WEIGHT) * (vertexes * vertexes));memset(adjmatrix->data, INFINITELY_GREAT, sizeof(WEIGHT) * (vertexes * vertexes));
}/*销毁顶点列表*/
void freeVertexList(pVertexList list) {if (list) {if (list->data) {free(list->data);list->data = NULL;}}
}/*销毁邻接矩阵*/
void freeAdjacentMatrix(pAdjacentMatrix adjmatrix) {if (adjmatrix) {if (adjmatrix->data) {free(adjmatrix->data);adjmatrix->data = NULL;}}
}/*创建图*/
pGraph generateGraph(int vertexes) {pGraph graph = (pGraph)malloc(sizeof(Graph));memset(graph, 0U, sizeof(Graph));generateVertexList(&graph->vertexes, vertexes);generateAdjacentMatrix(&graph->adjmatrix, vertexes);return graph;
}/*销毁图*/
void freeGraph(pGraph graph) {if (graph) {freeVertexList(&graph->vertexes);freeAdjacentMatrix(&graph->adjmatrix);free(graph);}
}/*设置顶点名称*/
void setVertexName(pGraph graph, int index, const char* name, const char* summary) {strcpy(graph->vertexes.data[index].name, name);strcpy(graph->vertexes.data[index].description, summary);
}/*获取顶点名称*/
const char* getVertexName(pGraph graph, int index) {return graph->vertexes.data[index].name;
}/*查找顶点索引*/
int findVertexIndex(pGraph graph, const char* name) {int index = 0;while (index < graph->vertexes.len) {if (strcmp(graph->vertexes.data[index].name, name) == 0) {return index;}++index;}return -1;
}/*设置两相邻顶点的边的权值*/
void setEdgeWeight(pGraph graph, int from, int to, WEIGHT weight) {graph->adjmatrix.data[(graph->adjmatrix.size * from) + to] = weight;
}/*得到两相邻顶点的边的权值*/
WEIGHT getEdgeWeight(pGraph graph, int from, int to) {return graph->adjmatrix.data[(graph->adjmatrix.size * from) + to];
}

测试数据

17 46
图书馆 这是学校的图书馆。
综合楼 这是学校的综合楼。
实验楼 这是学校的实验楼。
餐厅 这是学校的餐厅。
南门 这是学校的南门。
东门 这是学校的东门。
西门 这是学校的西门。
北门 这是学校的北门。
操场 这是学校的操场。
家属楼 这是学校的家属楼。
中心湖 这是学校的中心湖。
正门 这是学校的正门。
南区食堂 这是学校的南区食堂。
北区食堂 这是学校的北区食堂。
东区食堂 这是学校的东区食堂。
西区食堂 这是学校的西区食堂。
生物楼 这是学校的生物楼。
图书馆 综合楼 123
综合楼 图书馆 123
图书馆 餐厅 256
餐厅 图书馆 256
综合楼 实验楼 243
实验楼 综合楼 243
综合楼 餐厅 242
餐厅 综合楼 242
餐厅 实验楼 279
实验楼 餐厅 279
餐厅 南门 369
南门 餐厅 369
实验楼 南门 372
南门 实验楼 372
南门 操场 466
操场 南门 466
操场 东门 308
东门 操场 308
操场 正门 188
正门 操场 188
正门 西门 375
西门 正门 375
正门 南区食堂 115
南区食堂 正门 115
操场 南区食堂 261
南区食堂 操场 261
操场 中心湖 294
中心湖 操场 294
东门 西门 137
西门 东门 137
西门 北门 269
北门 西门 269
西门 家属楼 236
家属楼 西门 236
南区食堂 中心湖 278
中心湖 南区食堂 278
南区食堂 北区食堂 149
北区食堂 南区食堂 149
北区食堂 东区食堂 144
东区食堂 北区食堂 144
中心湖 南区食堂 565
南区食堂 中心湖 565
西区食堂 生物楼 104
生物楼 西区食堂 104
东区食堂 生物楼 376
生物楼 东区食堂 376

运行效果

源码下载

链接:程序源码下载地址
提取码:1111

C/C++校园导航图的实现相关推荐

  1. 图的应用(校园导航图最短路径求解)

    博主个人网站:39.106.201.180/ccb 联系博主(VX):xincsc0731 一.实验要求: 设计四川轻化工大学的校园平面图,所含景点不少于8个.以图中顶点表示学校内各景点,存放景点的名 ...

  2. 校园导航系统(导航方式:步行,骑行,车行)

    前言 学校数据结构课程要求做的课程设计 一.设计目的 (1).首先,在选择校园导航系统的图的存储结构时,由于当时还没有确定课题题目,最后一段时光临时学习了图的两种存储结构,由于本人认为邻接矩阵存储比较 ...

  3. 数据结构实践项目:校园路线导航图

    题目: 23.校园路线导游系统 1.问题描述 用无向网表示东莞理工学院的校园景点平面图,图中顶点表示主要景点(要求包 含学校的大部分景点信息,包括教学楼,体育馆,食堂,学生宿舍,图书馆等信息), 存放 ...

  4. 广播站 PHP,让一实听见你的声音——“校园之声”广播站招募小记

    为增添校园广播站的新鲜血液,进一步丰富校园文化生活,我校"校园之声"广播站在9月伊始启动了招贤纳新活动. 本次招贤纳新活动共招募播音员14名, 9月16日开始报名,通过笔试和面试的 ...

  5. 科益展机器人_Smartguy robotics 2021年校园领军(实习)精英计划

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Smartguy robotics 2021年校园领军(实习)精英计划 关于科益展机器人 科益展机器人(Smartguy robotics Co.,tld ...

  6. Java项目:校园人力人事资源管理系统(java+Springboot+ssm+mysql+jsp+maven)

    源码获取:博客首页 "资源" 里下载! 校园人力资源管理系统:学校部门管理,教室管理,学历信息管理,职务,教师职称,奖励,学历,社会关系,工作经历,培训管理,公告等信息功能等等. ...

  7. python爬取学校新闻_python-爬取校园新闻首页的新闻

    1.作业代码 importrequestsfrom bs4 importBeautifulSoupfrom datetime importdatetime#====================== ...

  8. 【分享】School Rumble校园迷糊大王PSP姐姐事件+PS2游戏第一,二学期【带VNR翻译教程】...

    7/22/2014 TUE   为「スクールランブル 姉さん事件です」加入了BANDAI PSP的引擎. 校园迷糊大王PSP姐姐事件 下载地址1:http://www.bego.cc/file/689 ...

  9. 一封会笑死人的校园情书

    Kiss郝美丽:            Sorry!我把Miss拼成了Kiss,一不小心吻了你,实在是对不起!        吾本良家子弟,正统少年,一向对美眉们保持一种昂首挺胸,目不斜视的高姿态,人 ...

最新文章

  1. keras 的 example 文件 cifar10_cnn.py 解析
  2. 【7.6.3】基于每个具体类一张表的继承映射
  3. 统计分析SQL Server Profiler 跟踪的SQL
  4. 【翻译自mos文章】OGG replicat 进程使用的 TCP port
  5. java 输入 方程,用java 编写一程序,求解一元二次方程:aX2+bX+c=0.参数a、b及c从命令行做参数输入 java...
  6. GoogLeNet Inception 系列
  7. DeprecationWarning Mongoose mpromise (mongoose's default promise li
  8. SAP UI5 new sap.ui.commons.Button trigger component load
  9. 备份到云端,准备好了吗?
  10. 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
  11. 5张图看懂如何实现Windows RTMP实时导播功能
  12. HTML5儿童玩具游戏商店网站模板
  13. 什么是Hash冲突?如何解决Hash冲突?
  14. 分享一些直播软件的测试点
  15. 生物信息学简史,A brief history of bioinformatics- Briefings in Bioinformatics综述解读
  16. iOS开发实战细节——通知写法
  17. [转载]2016美国数学建模MCM F题(政策)翻译:难民移入政策建模
  18. 教你用arduino控制LCD1602液晶屏的底层程序实现(全网最笨的方法)
  19. 解决ubuntu 16.04 启动黑屏,出现dev/sda7: clean, xxx/xxx files, xxx/xxx blocks字样问题
  20. AVR单片机-nRF24L01发送接收程序

热门文章

  1. 基于MT6572/32平台 Android 版本驱动移植日志
  2. sina 微博 签名档~~~
  3. PLC软件测试方法,常见plc输入输出信号及检测方法PPT课件
  4. 中国制造创意配件 - iPad 三合一读卡接口
  5. alienskineyecandy mac
  6. 2022-08-06 乐理知识(四) 认识五线谱——延音线和连音线,简谱与五线谱的区别,认识五线谱:谱号,高音谱号,低音谱号,中音谱号和和次中音谱号
  7. 机构扎堆四大领域绩优股
  8. HCIP第十天 交换第一天
  9. Django DRF 序列化类
  10. c8051f c语言编程,C8051F系列单片机开发与C语言编程