相关疑难解决方法(0)

使用Dijkstra算法的负权重

我试图理解为什么Dijkstra的算法不适用于负权重.阅读最短路径上的示例,我试图找出以下场景:

    2
A-------B
 \     /
3 \   / -2
   \ /
    C
Run Code Online (Sandbox Code Playgroud)

来自网站:

假设边缘全部从左向右指向,如果我们从A开始,Dijkstra算法将选择最小化d(A,A)+长度(边缘)的边(A,x),即(A,B).然后设置d(A,B)= 2并选择另一个边(y,C),使d(A,y)+ d(y,C)最小化; 唯一的选择是(A,C),它设置d(A,C)= 3.但它从未找到从A到B的最短路径,通过C,总长度为1.

我无法理解为什么使用Dijkstra的以下实现,d [B]将不会更新为1(当算法到达顶点C时,它将在B上运行放松,看到d [B]等于2,因此更新它的价值1).

Dijkstra(G, w, s)  {
   Initialize-Single-Source(G, s)
   S ? Ø
   Q ? V[G]//priority queue by d[v]
   while Q ? Ø do
      u ? Extract-Min(Q)
      S ? S U {u}
      for each vertex v in Adj[u] do
         Relax(u, v)
}

Initialize-Single-Source(G, s) {
   for each vertex v ? V(G)
      d[v] ? ?
      ?[v] …
Run Code Online (Sandbox Code Playgroud)

algorithm dijkstra shortest-path graph-algorithm

106
推荐指数
5
解决办法
9万
查看次数

Dijkstra和Prim的算法有什么区别?

任何人都可以告诉我DijkstraPrim的算法之间的区别吗?我知道每个算法的作用.但他们看起来和我一样.Dijkstra算法存储最小成本边的总和,而Prim算法存储最多一个最小成本边.这不一样吗?

algorithm shortest-path

32
推荐指数
3
解决办法
4万
查看次数