#ifndef _dijkstra_
#define _dijkstra_
#include using namespace std;
void testdijstra();
const int max_node = 1000;
/* 最簡單的:用二維陣列來記錄graph和weight
斐波那契堆實現:insert,get
1.最普通實現
2.使用二叉堆實現
3.實現fibonacci堆,進而用其實現
*/// 用二維陣列來記錄graph和weight
// graph[i][j] 從i到j是否有路徑:如果為0,沒有;>0,有!
void dijstra1(int graph[max_node], int size, int start, int *dist, int *prev);
// 從陣列中找到最小值的索引,只查詢bool值為false的
int findminfromarr(int *arr, int size, bool *used);
void elasped(int graph[max_node], int size, int *dist, int *prev, int tmp, bool *used);
// 列印結果:從s->t的路徑
void printpath(int *prev, int size, int s, int t);
// 用最小堆實現
/* 最小堆實現:用指標實現
指標實現似乎不太方便
之所以不方便是因為parent指標不好定位!!!
*/struct heapnode
};void insertheapnode(heapnode *head, heapnode *node);
heapnode *deletemin(heapnode *head);
// 用二叉堆實現
void dijstra2(int graph[max_node], int size, int start, int *dist, int *prev);
#endif
#include "2_dijkstra.h"
void testdijstra()
void dijstra1(int graph[max_node], int size, int start, int *dist, int *prev)
// 首先初始化與start相連的
for (int i = 0; i < size; ++i) }
// 由於一共有size個節點,因此要迴圈size-1次
for (int i = 1; i < size; ++i)
delete used;
}int findminfromarr(int *arr, int size, bool *used)
} return index;
}void elasped(int graph[max_node], int size, int *dist, int *prev, int tmp, bool *used)
} }}// 遞迴實現
void printpath(int *prev, int size, int s, int t)
printpath(prev, size, s, prev[t]);
cout << t << " ";
}void insertheapnode(heapnode *head, heapnode *node)
heapnode *deletemin(heapnode *head)
void dijstra2(int graph[max_node], int size, int start, int *dist, int *prev)
heapnode *root = null;
for (int i = 0; i < size; ++i)
else
} }}
最短路徑演算法之二 Dijkstra演算法
dijkstra演算法 dijkstra演算法主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。注意該演算法要求圖中不存在負權邊。首先我們來定義乙個二維陣列edge maxn maxn 來儲存圖的資訊。這個圖的edge 陣列初始化以後為 我們還需要用乙個一維陣列dis 來儲存1 號頂...
演算法 Dijkstra演算法筆記
參考文章 隨記參考邏輯 dijkstra演算法採用的是一種貪心的策略。演算法的基本思想是 通過不斷更新的距離陣列,每次從距離陣列找到離源點最近的乙個且沒有掃瞄過的節點,然後以該頂點為中心進行bfs擴充套件,直到所有節點都掃瞄一遍,最終得到源點到其餘所有點的最短路徑 1 起點固定,若要記錄到達路徑,則...
日日演算法 Dijkstra演算法
dijistra演算法作為一種最短路徑演算法,可以用來計算乙個節點到圖上其他節點的最短距離。主要是通過啟發式的思想,由中心節點層層向外拓展,直到找到中點。適用於無向圖和有向圖。假設我們要計算節點a到其它節點的最短距離 引入兩個集合 s,u 其中集合s表示已經求出最短路徑的點 以及最短距離 集合u表示...