代碼:
#include<bits/stdc++.h>
using namespace std;
#define LEN 100005
#define MAX INT_MAX
int n;
int node[LEN];
int next[LEN];
int cost[LEN];
int dijkstra(int start,int end){
/*求一個圖中從start到end的最短路徑。
n節點數,標號爲0,1,2……n-1。
next是鄰接表,
node[i]是鄰接表的索引,從node[v-1](v=0時,取1)到node[v]-1。
cost是對應的權,cost的值非負。
*/
priority_queue<int> Q;
int include[n];
int mine[n];
memset(include,0,n);
memset(mine,MAX,n);
Q.push(start);
while(!Q.empty()){
int v=Q.top();
Q.pop();
if(include[v]) continue;
include[v]=1;
int a,b;
if(v==0)a=0;
else a=node[v-1];
b=node[v];
for(int i=a;i<b;i++){
if(include[next[i]]) continue;
if(mine[v]+cost[i]<mine[next[i]]){
mine[next[i]]=mine[v]+cost[i];
Q.push(next[i]);
}
}
}
if(mine[end]==MAX) return -1;
else return mine[end];
}