Til the Cows Come Home(Dijkstra)
Dijkstra (迪杰斯特拉)最短路算法,算是模板
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 }