ACM模板 dijkstra,最短路徑

吉林大學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;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章