Til the Cows Come Home(Dijkstra)

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 }

 

posted @ 2018-05-18 18:21  木流牛马  阅读(143)  评论(0编辑  收藏  举报