本題大意:
輸入n,m,s,代表標號為1--n,有m組數據,終點為s。每組數據輸入兩個點及權值。然後輸入w,代表有w個起點,然後輸入各起點。求起點到終點的最短時間。
解題思路:
本題也是最短路徑問題。有多個起點,本題也是與hdu 一個人的旅行 采取相同的方法。另外選取一個點,將各起點據此點的距離記為0,並以此點最為起點。
具體請參考代碼:
#include#include #define INF 0x3f3f3f3f int map[1010][1010]; int dis[1010]; int mark[1010]; int n; void dijkstra()//dijkstra算法 { memset(mark,0,sizeof(mark)); for(int i=1;i<=n;i++) dis[i]=INF; dis[0]=0; for(int i=0;i<=n;i++) { int vir,min=INF; for(int j=0;j<=n;j++) if(!mark[j]&&dis[j] dis[vir]+map[vir][j]) dis[j]=dis[vir]+map[vir][j]; } } int main() { int m,s,w,begin; while(scanf(%d%d%d,&n,&m,&s)!=EOF) { for(int i=0;i<1010;i++) for(int j=0;j<1010;j++) map[i][j]=INF; for(int i=0;i t) map[p][q]=t; } scanf(%d,&w); for(int i=0;i