# 基于 Dijkstra 算法的最短路径规划
本小组项目基于 Dijkstra 算法,以武汉大学范围(文理学部,工学部,信息学部)为例,设计两种模式—地名输入模式和自由选点模式,并根据输入地名或选择点位自动规划出起点与终点间的最短路径在地图上予以显示,同时显示路径转点和总距离。数据源来自 OpenStreetMap,经过 Arcmap 处理。
## 架构设计
本程序为 C#语言编写的窗体应用程序(DijkstraForRoutePlanning.exe),其中包含了一个类库(Dijkstra.dll),若干控件和相应的文件操作以实现目标功能。
## 一、流程图
![](https://www.writebug.com/myres/static/uploads/2022/4/11/a8fa941352c7bfc0fc3a89c8d9a48fcd.writebug)
## 二、Dijkstra.dll
类库中包含了三个类:structure.cs, read.cs 和 compute.cs,分别用于存放各种结构体,读取文件和算法计算。其中,
structure.position()用于存放兴趣点,存有地名以及经纬度;
structure.road()存放路径信息;
structure.node()存放节点信息;
read.road()读取路径信息并存储;
read.road2node()将路径信息转换为节点信息;
read.poi()读取兴趣点信息并存储;
compute.shortestPath()用于计算最短路径。
## 三、Form1.cs[设计]
程序窗体包含了一个 ToolStripMenu,一个 DataGridView,四个 Lable,四个 TextBox,两个 Button 和一个 PictureBox 共 6 类,13 个控件并全部实现了功能。其中,
ToolStripMenu 用于导入兴趣点文件,如果没有额外的兴趣点文件,将采用默认的兴趣点文件(包含地名和经纬度的文件)。
DataGridView 显示兴趣点的名称(各种地标名称),
TextBox 分别用于读取或者出发地、目的地和显示路径距离、路径轨迹,
PictureBox 用于显示地图和路径,
Button 用于选择地名输入模式或自由选点模式。
## 四、Form1.cs
应用程序的主体。窗体初始化,调用类库中的类设计了若干方法和事件。
事件 Form1_Load_1():在窗体加载完成时在 DataGridView 中显示兴趣点地名,供用户在地名输入模式下选择出发地和目的地;
方法 InputPoi_ComputeAndDraw():地名输入模式路径规划的实现方法;
方法 FreeSection_ComputeAndDrawf():自由选点模式路径规划的实现方法;
事件 button1_Click_1():执行地名输入模式;
事件 butoon2_Click_2():执行自由选点;
事件 pictureBox1_MouseClick():自由选点中标记出发地和目的地;
方法 Near():寻找兴趣点距离最近的节点;
事件 导入兴趣点文件 ToolStripMenuItem_Click():导入兴趣点文件。
关键技术
## 五、Dijkstra 算法
## 5.1 简介
Dijkstra 算法 1959 年由 E.W.Dijkstra 提出,又称标号法。基本思想:按最短路径长度递增的顺序,逐个产生各最短路径。不仅可以求出起点到终点的最短路径及其长度,而且可以求出起点到其他任何一个顶点的最短路径及其长度
## 5.2 原理与步骤
用带权的邻接矩阵 Cost 来表示带权的 n 个节点的有向图,Cost[i,j]表示弧 <
![](https://www.writebug.com/myres/static/uploads/2022/4/11/9ac814bad61ac5e9b7207895afb65736.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/11/5c9afd98036c302d6b71df63fc238a23.writebug)
的权值,如果从
![](https://www.writebug.com/myres/static/uploads/2022/4/11/d5934a1e0e457affd24978f9ec837258.writebug)
到
![](https://www.writebug.com/myres/static/uploads/2022/4/11/33f1139bd983889cf04de1fc23960bf2.writebug)
不连通,则 Cost[i,j]=∞。下图表示了一个带权有向图以及其邻接矩阵引进一个辅助向量 Dist,每个分量 Dist[i]表示从起始点到每个终点
![](https://www.writebug.com/myres/static/uploads/2022/4/11/1bec5f015d6fc381ba66b102f7adae95.writebug)
的 最短路径长度。假定起始点在有向图中的序号为 i0,并设定该向量的初 始值为:
Dist[i]=Cost[
![](https://www.writebug.com/myres/static/uploads/2022/4/11/c2a2533df6249495031df94fa900f973.writebug)
,i]
![](https://www.writebug.com/myres/static/uploads/2022/4/11/1f2cb90d305dd24ec0c65e82aed531fb.writebug)
∈V。
令 S 为已经找到的从起点出发的最短路径的终点的集合。
选择
![](https://www.writebug.com/myres/static/uploads/2022/4/11/4374563f29bf57873788ff94caa8c1e3.writebug)
,使得 Dist[j]=Min{ Dist[i]}
![](https://www.writebug.com/myres/static/uploads/2022/4/11/56486f182b43785d3fa27bbfb510319e.writebug)
∈V-S}
![](https://www.writebug.com/myres/static/uploads/2022/4/11/aa715807f0f793868292e88d8c1b10cd.writebug)
∈V。
![](https://www.writebug.com/myres/static/uploads/2022/4/11/c399e24c11309ca39e08358d6f3c6585.writebug)
就是当前求得的一条从 vi0 出发的最短路径的终点,令 S=S∪{vj}
修改从
![](https://www.writebug.com/myres/static/uploads/2022/4/11/514c2c5b4468e6de1356c4285dc9b766.writebug)
出发到集合 V-S 中任意一顶点
![](https://www.writebug.com/myres/static/uploads/2022/4/11/16158d9e9a55a9ff11337ab65aa6f59f.writebug)
的最短路径长度。 如果 Dist[j]+Cost[j,k]<Dist[k] 则修改 Dist[k]为: Dist[k]=Dist[j]+Cost[j,k]
重复第 2、3 步操作共 n-1 次,由此求得从
![](https://www.writebug.com/myres/static/uploads/2022/4/11/5080c8dd26a4d7afb737d42e0716216c.writebug)
出发的到图上各 个顶点的最短路径是依路径长度递增的序列。
## 六、画图
本程序采用 PictureBox 作为画板,根据数据中的路径信息,采用 DrawLine 将地图画出,其中还涉及了经纬度转换到像素坐标系中的过程。
**结论**
各组件能够正常运行并实现全部功能。程序所规划的最短路径与实际符合的较好,与 arcgis 中的路径规划结果一致,用户界面整洁美观,简单易用,符合要求。
![](https://www.writebug.com/myres/static/uploads/2022/4/11/3c9eed4784e47345c4c023c841b7573d.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/4/11/f0a0b0f72f46af334e6b244d6bb86317.writebug)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本程序为 C#语言编写的窗体应用程序(DijkstraForRoutePlanning.exe),其中包含了一个类库(Dijkstra.dll),若干控件和相应的文件操作以实现目标功能。 本小组项目基于 Dijkstra 算法,以武汉大学范围(文理学部,工学部,信息学部)为例,设计两种模式—地名输入模式和自由选点模式,并根据输入地名或选择点位自动规划出起点与终点间的最短路径在地图上予以显示,同时显示路径转点和总距离。数据源来自 OpenStreetMap,经过 Arcmap 处理。
资源推荐
资源详情
资源评论
收起资源包目录
基于C# Dijkstra 算法实现的(WinForm)最短路径规划【100012021】 (103个子文件)
DijkatraCLass.csprojAssemblyReference.cache 76KB
Dijkstra.csprojAssemblyReference.cache 76KB
DesignTimeResolveAssemblyReferencesInput.cache 7KB
DijkstraForRoutePlanning.csprojAssemblyReference.cache 4KB
DesignTimeResolveAssemblyReferences.cache 1KB
DijkstraForRoutePlanning.csproj.GenerateResource.cache 1012B
project.nuget.cache 509B
Dijkatra.csprojAssemblyReference.cache 424B
DijkatraCLass.assets.cache 194B
Dijkstra.assets.cache 194B
Dijkatra.assets.cache 194B
DijkstraForRoutePlanning.csproj.CoreCompileInputs.cache 41B
Dijkstra.csproj.CoreCompileInputs.cache 41B
Dijkatra.csproj.CoreCompileInputs.cache 41B
Dijkstra.AssemblyInfoInputs.cache 41B
Dijkatra.AssemblyInfoInputs.cache 41B
DijkatraCLass.AssemblyInfoInputs.cache 41B
DijkatraCLass.csproj.CoreCompileInputs.cache 41B
App.config 184B
DijkstraForRoutePlanning.exe.config 184B
DijkstraForRoutePlanning.csproj.CopyComplete 1024B
Form1.Designer.cs 14KB
Form1.cs 10KB
read.cs 4KB
compute.cs 4KB
Resources.Designer.cs 3KB
structure.cs 2KB
AssemblyInfo.cs 1KB
Settings.Designer.cs 1KB
DijkatraCLass.AssemblyInfo.cs 999B
Dijkstra.AssemblyInfo.cs 984B
Dijkatra.AssemblyInfo.cs 984B
Program.cs 822B
.NETFramework,Version=v4.7.2.AssemblyAttributes.cs 210B
.NETStandard,Version=v2.0.AssemblyAttributes.cs 187B
DijkstraForRoutePlanning.csproj 4KB
Dijkstra.csproj 138B
DijkatraCLass.dll 7KB
Dijkstra.dll 7KB
DijkatraCLass.dll 7KB
Dijkstra.dll 7KB
Dijkatra.dll 7KB
Dijkstra.dll 7KB
基于Dijkstra算法的最短路径规划.docx 718KB
DijkstraForRoutePlanning.exe 20KB
DijkstraForRoutePlanning.exe 20KB
project.assets.json 11KB
DijkatraCLass.csproj.nuget.dgspec.json 2KB
Dijkstra.csproj.nuget.dgspec.json 2KB
Dijkatra.csproj.nuget.dgspec.json 2KB
DijkatraCLass.deps.json 1KB
Dijkatra.deps.json 1KB
Dijkstra.deps.json 1KB
LICENSE 1KB
README.md 6KB
基于Dijkstra算法的最短路径规划.mp4 50.99MB
DijkstraForRoutePlanning.pdb 46KB
DijkstraForRoutePlanning.pdb 46KB
Dijkstra.pdb 9KB
Dijkstra.pdb 9KB
Dijkatra.pdb 9KB
DijkatraCLass.pdb 9KB
Dijkstra.pdb 9KB
Dijkatra.pdb 9KB
DijkatraCLass.pdb 9KB
17-b31d605c545e6804e2b2495542bd8aa9.png 341KB
16-72422bd075d1c050f9377394ce93587d.png 337KB
1-33d84b0c180b10e970e938bd36f44185.png 54KB
15-3f2335432cbf9b0c86f242092b80a3b4.png 445B
13-3f2335432cbf9b0c86f242092b80a3b4.png 445B
14-31c92c3b6de59de0b910530d6e9e9d10.png 392B
3-cc478067ca75225fc1bb02336a4e4527.png 379B
5-229d057944a9530340249b881c487efd.png 369B
9-229d057944a9530340249b881c487efd.png 369B
12-229d057944a9530340249b881c487efd.png 369B
10-53875a095da5e366027037f482d73d91.png 357B
4-26a947d20752aa9a9efd24117053bfdf.png 350B
8-26a947d20752aa9a9efd24117053bfdf.png 350B
2-26a947d20752aa9a9efd24117053bfdf.png 350B
6-26a947d20752aa9a9efd24117053bfdf.png 350B
11-26a947d20752aa9a9efd24117053bfdf.png 350B
7-f02861486823ddd0afba3301fee166aa.png 348B
DijkatraCLass.csproj.nuget.g.props 1KB
Dijkatra.csproj.nuget.g.props 1KB
Dijkstra.csproj.nuget.g.props 1KB
DijkstraForRoutePlanning.Properties.Resources.resources 180B
DijkstraForRoutePlanning.Form1.resources 180B
Form1.resx 6KB
Resources.resx 5KB
Settings.settings 242B
DijkstraForRoutePlanning.sln 2KB
.suo 68KB
DijkatraCLass.csproj.nuget.g.targets 615B
Dijkatra.csproj.nuget.g.targets 615B
Dijkstra.csproj.nuget.g.targets 615B
lineInread.txt 151KB
dotInread.txt 36KB
DijkatraCLass.csproj.FileListAbsolute.txt 2KB
whupoi.txt 1KB
DijkstraForRoutePlanning.csproj.FileListAbsolute.txt 1KB
共 103 条
- 1
- 2
神仙别闹
- 粉丝: 3688
- 资源: 7461
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页