單源最短路徑Dijkstra演算法

2022-08-11 01:27:19 字數 2502 閱讀 2120

dijkstra演算法中設定了一頂點集合s,從源點s到集合中的頂點的最終最短路徑的權值均已確定。演算法反覆選擇具有最短

路徑估計的頂點u∈v - s,並將u加入s中,對u的所有出邊進行鬆弛,在下列演算法實現中,用到了頂點的最小優先佇列

q,排序關鍵字為頂點的d值。d為實時權值。

**如下:

[cpp]view plain

copy

#include

#include

using

namespace

std;  

#define maxvalue 10000          //定義乙個最長路徑 

//此處dijkstra演算法的圖為有向圖

struct

edge  

;  struct

vertex  

;  struct

graph  

;  class

mswdijkstra  

;  mswdijkstra::mswdijkstra(char

*vertex,

intvernum,

char

adj[2],

int*weight,

intadjnum)  

for(i = 0;i 

}  void

mswdijkstra::dijkstrainsert(

intsource,

intdest,

intweight)  

else

edge* newnode = new

edge;  

newnode->verno = dest;  

newnode->weight = weight;  

newnode->next = temp->next;  

temp->next = newnode;  

}  }  

intmswdijkstra::dijkstrafindkey(

char

key)  

return

i;  

}  int

mswdijkstra::dijkstraextramin(

bool

*visited,

intlength)  

}  return

min;  

}  void

mswdijkstra::dijkstrainitsinglesource()  

}  void

mswdijkstra::dijkstramsw(

char

sourcekey)  

dijkstrainitsinglesource();  

shortway[source] = 0;  

while

(count <= vernum)  

sourceedge = sourceedge->next;  

}  }  

delete

visited;  

}  void

mswdijkstra::dijkstraoutput()  

while

(parent[j] != j);  

cout

cout<

route.pop_front();  

while

(!route.empty())  

cout<

<

}  }  

intmain()  

;  int

vernum = 5;  

char

adj[2] = ,,,,,,,,,};  

intweight = ;  

intadjnum = 10;  

mswdijkstra *dijkstra = new

mswdijkstra(vertex,vernum,adj,weight,adjnum);  

dijkstra->dijkstramsw('s'

);  

dijkstra->dijkstraoutput();  

return

0;  

}  結果如下:

[cpp]view plain

copy

all the most shortest route from source :  

s---s    0  

s---y---t    8  

s---y---t---x    9  

s---y    5  

s---y---z    7  

請按任意鍵繼續. . .  

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra 單源最短路徑

演算法思想 輔助陣列dis i 表示當前源頂點到i的最短路徑。dis i 在程式未結束前,類似於動態規劃,可更新以取得最小值 陣列path用來記錄路徑 首先初始化令dis i 為edge v0 i v0為源頂點 然後選擇離源頂點最小的路徑,加入到構造最短路徑的點集合中,然後看是否可以更新dis i ...

Dijkstra單源最短路徑

dijkstra單源最短路徑 給定乙個帶權有向圖g v,e 其中每條邊的權是乙個非負實數。另外,還給定 v 中的乙個頂點,稱為源。現在我們要計算從源到所有其他各頂點的最短路徑長度。這裡的長度是指路上各邊權之和。這個問題通常稱為單源最短路徑問題。下面給出兩個計算單源最短路徑的模板。dijkstra 簡...