1.鄰接矩陣實作 複雜度O(V^2)
int w[MAX_V][MAX_V]; ///w[u][v]表示邊u->v的權值(不存在時是INF)
int d[MAX_V]; ///頂點s出發的最短距離
bool vis[MAX_V]; ///已經連通的點
int V; ///頂點數
///求起始點s到各個頂點的最短距離
void dij(int s)
{
fill(d,d+V,INF);
fill(vis,vis+V,false);
d[s]=0;
while(true)
{
int v=-1;
for(int u=0;u<V;u++) ///從未使用的頂點中選擇一個距離最小的頂點
if(!vis[u]&&(v==-1||d[u]<d[v]))
v=u;
if(v==-1) break;
vis[v]=true;
for(int u=0;u<V;u++)
d[u]=min(d[u],d[v]+w[v][u]);
}
}
2.使用STL的優先隊列實作 複雜度O(ElogV) E為邊的個數
待更...