题7

题目

Q:下列关于图的最短路径的相关叙述中, 正确的是 ( ).
A. 最短路径一定是简单路径
B. Dijkstra 算法不适合求有回路的带权图的最短路径
C. Dijkstra 算法不适合求任意两个顶点的最短路径
D. Floyd 算法求两个顶点的最短路径时, 一定是 的子集

分析

A:dj算法、bf算法,floyd算法,这三者在对于负权回路上的处理的区别在于,dj算法不能处理负权回路,bf算法可以处理负权回路,floyd算法可以处理负权回路。
dj算法只能求单源最短路径,bf算法可以求任意两点之间的最短路径,floyd算法也可以求任意两点之间的最短路径。


题8对比起来看

A 正确, 见严蔚敏撰写的教材《数据结构》。Dijkstra 算法适合求解有回路的带权图的最短路径, 也可以求任意两个顶点的最短路径, 不适合求带负权值的最短路径问题。
在用 Floyd 算法求两个顶点的最短路径时,当最短路径发生更改时, 就不是 的子集。

Heap-DijkstraFloyd
最短路类型单源单源一全源
建图邻接表邻接表邻接矩阵
算法贪心,松弛贪心,松弛动态规划 (插点法
优化优先队列队列
负边权不能
判负环不能
时间复杂度0(mlogm)kmnm)
图的大小大/中 中/小 n= 1,m= 1
暴力 DijkstraHeap-DijkstraBellman-Ford
最短路类型单源单源单源单源
数据维护e[u], d[u], vis[u] 优先队列 距离优先e[u] , d[u] 队列 时间优先
算法贪心、松弛,出圈贪心、松弛、入队、出队所有边松弛出队点的出边松弛
负边权不能不能
判负环不能不能
时间复杂度
图的大小中/小 n= 1,m= 1大/中 n= 1, m= 1中/小 n= 1,m= 1中/小 n= 1,m= 1