吉林大學dijkstra模板
/*=======================================================*\
Dijkstra 數組實現 O(N^2)
Dijkstra --- 數組實現(在此基礎上可直接改爲STL的Queue實現)
lowcost[] --- beg到其他點的最近距離
path[] -- beg爲根展開的樹,記錄父親結點
\*=======================================================*/
#define INF 0x03F3F3F3F
const int N;
int path[N], vis[N];
void Dijkstra(int cost[][N],int lowcost[N],int n,int beg){
int i,j,min;
memset(vis,0,sizeof(vis));
vis[beg] = 1;
for (i=0 ; i<n ; i++){
lowcost[i] = cost[beg][i];
path[i] = beg;
}
lowcost[beg] = 0;
path[beg] = -1;
int pre = beg;
for(i=1 ; i<n ; i++){
min = INF;
for(j=0 ; j<n ; j++)
//下面的加法可能導致溢出,INF不能取太大
if(vis[j]==0 && lowcost[pre]+cost[pre][j]<lowcost[j] ){
lowcost[j] = lowcost[pre] + cost[pre][j];
path[j] = pre;
}
for(j=0 ; j<n ; j++)
if( vis[j]==0 && lowcost[j]<min ){
min = lowcost[j];
pre = j;
}
vis[pre] = 1;
}
}