Dijkstra演算法實現類 提高,鄰接表 優先佇列

2021-06-05 06:38:10 字數 959 閱讀 6589

總覺得前點時間寫的dijkstra,有點繁瑣,還是用回鄰接表和優先佇列感覺舒服點。

廢話就不多說了,原先那篇鄰接矩陣的dijkstra鏈結如下:

這次改為優先佇列,則需要乙個vertex結構,記錄其序號及到起點的cost。每次push進去佇列之前,都重新整理其最新cost。並且加了些輔助變數,如判斷是否已經處理過該節點的bool陣列等。改用鄰接表的話,則是感覺空間比較好,感覺也是比較舒服。

這次的**如下:

#include #include #define max_edge 30

#define max_vertex 10

#define infinite 0x7fffffff

#define al_end -1

using namespace std;

struct vertex

;bool operator < (const vertex &a, const vertex &b)

struct aledge

;class algraph

;void algraph::getedata()

}void algraph::initialize()

getedata();

}void algraph::dijkstra()

if (vertexdealed[currentvertex.vertex])

vertexdealed[currentvertex.vertex] = true;

vertex nextvertex;

for (int i = alvertex[currentvertex.vertex]; i != al_end; i = edge[i].next)

}} if (currentvertex.vertex == destination)

else }

int main()

dijkstra演算法實現

include include using namespace std const int maxnum 100 const int maxint 999999 各陣列都從下標1開始 int dist maxnum 表示當前點到源點的最短路徑長度 int prev maxnum 記錄當前點的前乙個結...

Dijkstra演算法的實現

dijkstra演算法的實現 讀入 dijkstratxt 中的部分網路資料 test.txt 弧段起點id,弧段終點id,弧段距離 用dijkstra演算法生成的最佳路徑再寫入 routetxt.txt 檔案中 include include include include using names...

Dijkstra演算法java實現

看到網上的dijkstra演算法寫的都好複雜,我自己就簡單的寫了乙個,例子為書上的例子。public class dijkstra 存放的為頂點所在陣列的id和頂點名稱 mapv new hashmap 不存放源點 v0 v.put 1,v1 v.put 2,v2 v.put 3,v3 v.put ...