Til the Cows Come Home(Dijkstra)
阿新 • • 發佈:2018-05-18
pan std ble book amp TP col AC home
Dijkstra (迪傑斯特拉)最短路算法,算是模板
POJ - 2387
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 const int INF=0x3f3f3f3f; 6 int book[1005],dis[1005],e[1005][1005]; 7 8 int main() 9 { 10 int T,n,u,minn; 11 cin>>T>>n; 12 13 for(int i=1;i<=n;i++) 14 { 15 for(int j=1;j<=n;j++) 16 if(i==j) e[i][j]=0; 17 else e[i][j]=e[j][i]=INF; 18 } 19 for(int i=1;i<=T;i++) 20 { 21 int a,b,c; 22 cin>>a>>b>>c; 23 if(e[a][b]>c) //這步容易落下 24 e[a][b]=e[b][a]=c;25 } 26 for(int i=1;i<=n;i++) 27 dis[i]=e[1][i]; 28 memset(book,0,sizeof(book)); 29 book[1]=1; //初始化 30 31 for(int i=1;i<=n-1;i++) //n減去第一個點 就是n-1次 32 { 33 minn=INF; 34 for(int j=1;j<=n;j++) 35 { 36 if(book[j]==0&& dis[j]<minn)37 { 38 minn=dis[j]; 39 u=j; //u記錄點的名稱 40 } 41 } 42 book[u]=1;//這個點已經是到1的最小的點了,所以下一次不用 43 for(int v=1;v<=n;v++) 44 { 45 if( book[v]==0 && dis[v]>dis[u]+e[u][v]) //如果1到V點的最小值還沒算過 46 dis[v]=dis[u]+e[u][v]; 47 } 48 } 49 cout<<dis[n]<<endl; 50 51 }
Til the Cows Come Home(Dijkstra)