標籤:style blog 2014 os name c
動態更新中
先貼模板(吉林大學的模板)
#define INF 0x03F3F3F3Fconst 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; }}
一、注意題目中規定的源點到底是0還是n,以及0到底是不是頂點,看好自己的模板,別用錯
二、注意輸入的時候判重邊
w=min(w,cost[u][v]);
三、單源最短路其實把<改為>是可以變成單源最長路的
如zoj 1655 每條路的權值是貨物經損耗之後留下的比率,所以越大越好
此時的初始化:將四、裡的幾處,按照題意相應做更改
四、最短路初始化:
cost[][]在讀入之前初始化為最大值,lowcost[]初始化為最大值,另外在求最短路的過程中,min那個參數初始化為最大值