Djikstra算法是一种解决单源最短路径问题的算法,其基本思想是:维护一个集合S,记录已确定了最短路径的定点,以及一个数组dist,记录源点到其他点的最短路径长度。算法的流程如下:
初始化:将源点加入集合S,并将dist数组初始化为源点到其他点的距离。
重复执行以下步骤直到集合S包含所有顶点:
a. 找到距离集合S最近的顶点u,也就是dist[u]最小的顶点。
b. 将顶点u加入集合S。
c. 对集合V-S(即未被确定最短路径的点)中的每个顶点v,如果存在一条边(u, v),则更新v的最短路径:dist[v] = min(dist[v], dist[u] + wu,v),其中wu,v表示边(u, v)的权重。
最终,dist数组中存储的就是源点到其他顶点的最短路径长度。
下面是C++代码实现:
#include
#include
#include
#include
using namespace std;
const int N = 100010, INF = 0x3f3f3f3f;
int h[N], e[N], ne[N], w[N], idx;
int dist[N];
bool st[N];
int n, m;
void add(int a, int b, int c)
{
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;
}
void dijkstra()
{
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
priority_queue, vector>, greater<>> pq;
pq.push({0, 1});
while (pq.size
上一篇:BadImageFormatException是C#中的异常类型,表示在尝试加载程序集时遇到了无效或损坏的图像文件格式。
下一篇:BadMethodCallException 方法 App\Http\Controllers\StoreController::show 不存在。