数据结构笔记——Dijkstra算法

写在前面:科班出身,应届考研党,愿21考研成功上岸,冲冲冲!

目录

一、BFS算法的局限性

二、Dijkstra算法

三、如何使用数组信息

四、用于负权值带权图


一、BFS算法的局限性

带权路径长度——当图是带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度

BFS算法求单源最短路径只适用于无权图,或所有边的权值都相同的图

二、Dijkstra算法

数据结构笔记——Dijkstra算法_第1张图片

初始:从V0开始,初始化三个数组信息如下

数据结构笔记——Dijkstra算法_第2张图片

第1轮:循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,零final[j] = true

数据结构笔记——Dijkstra算法_第3张图片

数据结构笔记——Dijkstra算法_第4张图片

数据结构笔记——Dijkstra算法_第5张图片

数据结构笔记——Dijkstra算法_第6张图片

数据结构笔记——Dijkstra算法_第7张图片

检查所有邻接自Vi的顶点,若其final值为false,则更新dist和path信息

第2轮:循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,零final[j] = true

数据结构笔记——Dijkstra算法_第8张图片

数据结构笔记——Dijkstra算法_第9张图片

数据结构笔记——Dijkstra算法_第10张图片

数据结构笔记——Dijkstra算法_第11张图片数据结构笔记——Dijkstra算法_第12张图片

第3轮:循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,零final[j] = true

数据结构笔记——Dijkstra算法_第13张图片数据结构笔记——Dijkstra算法_第14张图片

数据结构笔记——Dijkstra算法_第15张图片数据结构笔记——Dijkstra算法_第16张图片数据结构笔记——Dijkstra算法_第17张图片数据结构笔记——Dijkstra算法_第18张图片

第4轮:循环遍历所有结点,找到还没确定最短路径,且dist最小的顶点Vi,零final[j] = true

数据结构笔记——Dijkstra算法_第19张图片

数据结构笔记——Dijkstra算法_第20张图片数据结构笔记——Dijkstra算法_第21张图片

三、如何使用数组信息

数据结构笔记——Dijkstra算法_第22张图片

V0到V2的最短(带权)路径长度为:dist[2] = 9

通过path[]可知,V0到V2的最短(带权)路径:V2<- -- V1<-----V4<------V0

时间复杂度:O(n^2)即O(|V|^2)

四、用于负权值带权图

数据结构笔记——Dijkstra算法_第23张图片

数据结构笔记——Dijkstra算法_第24张图片

数据结构笔记——Dijkstra算法_第25张图片

结论:Dijkstra算法不适用于有负权值的带权图

 

你可能感兴趣的:(考研数据结构,算法,数据结构)