1. 程式人生 > >Til the Cows Come Home(Dijkstra)

Til the Cows Come Home(Dijkstra)

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)