自己對dijstra演算法的理解是:
首先輸入儲存點,邊的權值(注意無向圖和有向圖在儲存時的區別)。
將表示從起點st到頂點 i 的距離的d[ i ]陣列的每乙個值初始化為inf,令d[st] = 0。
遍歷d[ ]陣列的下標 i (即頂點 i)這個操作是通過優先佇列來實現的,然後遍歷以頂點 i 為起點的邊,更新d[ i ]的最小值。
最後直接訪問d[en],即可得到最短距離。
通過模板題來熟悉一下這個演算法吧,最短路之hdu2544
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8view code#define inf 0x3f3f3f3f
9#define fre() freopen("in.txt","r",stdin)
1011
using
namespace
std;
12 typedef long
long
ll;13 typedef pair p;//
first是距離,second是點的編號
14const
int maxn = 150;15
int d[maxn];//
陣列d[i]表示從起點s到頂點 i 的最短距離
16int
n,m;
17struct
edge
1820
int to;//
表示這條邊的終點
21int cost;//
該邊的權重
22};
23 vectorg[maxn];//
儲存以下標i為起點的邊
24 priority_queue,greater> que;//
遍歷d陣列的下標,更新最小值
2526
void
init()
2737}38
39int
main()
4063}64
}65 printf("
%d\n
",d[n]);66}
67return0;
68 }
另外還有乙個用二維陣列的寫法:
1 #include 2 #include 3 #include 4view code#define inf 0x3f3f3f3f56
using
namespace
std;
7const
int maxn = 100;8
9int
e[maxn][maxn];
10int
dis[maxn],vis[maxn];
11int
n,m;
1213
void
init()
1421}22
inta,b,c;
23for(int i = 0; i < m; i++)
2429
for(int i = 1; i <= n; i++)//
算出1到各個點的距離
3034 vis[1] = 1;35
}3637void
dij()
3850
}51 vis[u] = 1;52
for(int j = 1; j <= n; j++)
5358}59
}60}61
62int
main()
6370
return0;
71 }
模板 Dijkstra演算法
劉汝佳陳鋒編著的演算法競賽入門經典訓練指南 比賽的時候把dijkstra寫炸了 大霧 比賽完去看了下書,順便發到部落格上 每次找書好麻煩的 include include include include define inf 0x3f3f3f3f using namespace std const ...
C spfa和dijkstra演算法模板
最短路模板題目。spfa 或 用堆優化的迪傑斯特拉演算法均可實現。成都浣花溪公園是一座有著詩歌文化氣息的公園,它以杜甫草堂的歷史文化內涵為背景,運用現代園林和建築設計的前沿理論,以自然雅緻的景觀和建築凸現川西文化醇厚的歷史底蘊,是一座集將自然景觀和城市景觀 古典園林和現代建築藝術有機結合的城市公園。...
最短路 Dijkstra演算法模板
最短路 dijkstra演算法 不能處理負權邊 未優化 時間複雜度為o n 2 n為頂點數 堆優化 時間複雜度大概為o m n logm m為邊數 模板題 未優化 p3371 模板 單源最短路徑 弱化版 模板題 堆優化 p4779 模板 單源最短路徑 標準版 code 未優化 include inc...