文章导航
大二上数据结构实验1内容,使用C语言实现无向图最短路径搜索
一、实验题目和要求
实验题目:无向图最短路径搜索 (一)实验目的:掌握 Dijkstra 算法的原理。 (二)基本要求:熟练掌握图的操作。 (三)内容提要: 1)下图为校内知名建筑物示意平面图(其中“传送门”用于增加网络复杂度),以边表示建筑物间的路径,各条路径上方的数字表示路径长度。 2)针对该图进行构建数据结构和算法,通过键盘输入任意两建筑物的名称,可查询建筑物间的最短路径长度,并输出最短路径。 注:1)用无向网表示校园内的各建筑的平面图,将平面图看作一张带权无向图,为此图选择适当的数据结构。 2)Dijkstra 算法是典型的单源最短路径算法,用于计算节点间的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。本次实验采用此算法求图中两点间的最短路径。
【输入样例】 北门 南门
【输出样例】 74 北门->传送门3->腾飞塔->图书馆->传送门2->南门
二、按不同功能分析各程序模块
(一)包含库函数、定义常量、变量类型
1 |
(二)图的存储结构定义
1 | typedef enum {DG,DN,UNG,UDN} GraphKind; |
(三)迪杰斯特拉算法求最短路径
1 | void ShortestPath_DIJ(MGraph G,int v0, int vm,int P[MAX_VERTEX_NUM][MAX_VERTEX_NUM],int D[]) |
(四)主函数(输入查找的起点终点,输出最短路径)
1 | int main() |
三、思路分析
- 用邻接矩阵存储图的边信息
- 输入起点终点,判断它们的编号,传入求路线的函数中
- 用dijkstra算法求从起点到任意一点的最短路径——一种优化方法,只求到所输入的终点为止——一次循环得出一个节点的最短路径,更新最短路径长度数组(确定为最短的节点对应final数组为true),并更新记录经过节点的矩阵
- 输出终点对应的路径长度,用循环依次筛选对应路径(该节点与当前位置相邻且对应于经过节点矩阵那行的对应位置为true),输出路径上的节点。循环完一次后当前位置进1,且把经过的路径对应矩阵中元素置为false(防止回溯)
四、运行结果分析
题目要求用例:
自己测试的用例:
根据画图分析,运行结果正确。