IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 校园地图课程设计 -> 正文阅读

[数据结构与算法]校园地图课程设计

*一、需求分析*

给定校园内10个以上的地点及路径图,给出推荐路径。

要求:

构建这些地点之间的带权图,权重设置为距离或时间;

任意输入两个地点,给出推荐路径,需给出自行车和步行两种方案。

*二、设计*

设计一个对象地图 AdjacencyLis包含初始化地图信息,创建地图,计算各个顶点的最短路径,输出路径长度和信息、三个结构体EdgeNode、VertexNode、GraphAdjList分别存储下标,权值,数据,顶点,边数信息。

为了使校园导航地图使用方便,设计了图片显示和后台输入,当程序运行时,系统把校园平面地图显示出来,在后台输入需要的查看的路径。

*图片显示:*

\1. 首先我用高德地图截图一张合肥工业大学的图片。

\2. 在地图旁边备注系统所需要的顶点信息,根据信息进行排序。

\3. 使用system(“mspaint 地图名字.png”)和while{1}使地图一直循环使用一直显示在我们屏幕上。

*地图(弗洛伊德算法)*

*算法思想:*

Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。

*步骤:*

初始状态:Dis是记录各个顶点间最短路径的矩阵。
第1步:初始化D。
矩阵D中顶点a[i][j]的距离为顶点i到顶点j的权值;如果i和j不相邻,则a[i][j]=∞。实际上,就是将图的原始矩阵复制到S中。
注:a[i][j]表示矩阵D中顶点i(第i个顶点)到顶点j(第j个顶点)的距离。
第2步:以顶点A(第1个顶点)为中介点,若a[i][j] > a[i][0]+a[0][j],则设置a[i][j]=a[i][0]+a[0][j]。
以顶点a[1]6,上一步操作之后,a[1][6]=∞;而将A作为中介点时,(B,A)=12,(A,G)=14,因此B和G之间的距离可以更新为。
同理,依次将顶点B,C,D,E,F,G作为中介点,并更新a[i][j]的大小。

*地图具体设计*

\1. 第一步设立三个结构体EdgeNode、VertexNode、GraphAdjList保存信息

\2. 构建地图类,包含构造函数(初始化地图)、显示函数,计算各个顶点的最短路径,输出各个顶点的最短路径。

\3. 创建地图:建立顶点表,读入顶点信息,将边表置为空表。第二步使用头插法建立边表,计算各个顶点之间的最短路径

\4. 初始化地图数据,输入定点数和边数

\5. 输出路径长度和具体路径,初始化path与dis。

\6. 输入地点序号,关闭地图,显示路径长度和具体路径。

*三、系统框架图:*

image-20220406210137241

image-20220406210144887

*四、属性与方法定义*

类/结构函数名/变量作用
EdgeNodeAdjvex、weight、*next存储边的信息
VertexNodedata[50]、*firstedge顶点表结点
GraphAdjListadjList顶点和边数
AdjacencyListShowALGraph展示地图信息
AdjacencyListTest显示界面
AdjacencyListInitMap初始化地图
AdjacencyListCreateALGraph计算各个顶点信息
AdjacencyListShortestPath_Floyd输出各个顶点信息

*五、调试与测试*

img

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r85TXgah-1649250186021)(https://raw.githubusercontent.com/lmy12367/img/main/imgimage-20220406210220832.png)]

img

img

*六、参考文献*

Cdsn–弗洛伊德算法

Csdn–弗洛伊德实现

Csdn–如何缓存图片

*七、感受感悟*

]

*六、参考文献*

Cdsn–弗洛伊德算法

Csdn–弗洛伊德实现

Csdn–如何缓存图片

*七、感受感悟*

通过这次数据结构课程设计,让我明白了的有向图和无向图的区别,通过此次课程设计帮助我复习了弗洛伊德算法、动态规划的思想、迪杰斯特拉算法在求最短路径时如何设计算法完成对最短路径的求解,我查找了资料进一步明白了动态规划的思想和完善了对图的认识。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:56:50  更:2022-04-07 22:58:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:05:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码