hdoj 2544 最短路

题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=2544

分析:Dijkstra算法

 1 //2013-10-30 10:01:25    Accepted    2544    15MS    340K    1824 B    C++    空信高手
 2 #include <iostream>
 3 using namespace std;
 4 
 5 /*==================================================*\
 6  | Dijkstra 数组实现O (N^2 )
 7 | Dijkstra --- 数组实现( 在此基础上可直接改为STL 的Queue实现)
 8  | lowcost[] --- beg 到其他点的最近距离
 9 | path[] -- beg为根展开的树,记录父亲结点
10 \*==================================================*/
11 #define INF 0x3F3F3F3F;
12 const int N=110;
13 int path[N],vis[N];
14 int cost[N][N];
15 void Dijkstra(int lowcost[N],int n,int beg)
16 {
17     int i,j,min;
18     memset(vis,0,sizeof(vis));
19     vis[beg]=1;
20     for(i=0; i<n; i++)
21     {
22         lowcost[i]=cost[beg][i];
23         path[i]=beg;
24     }
25     lowcost[beg]=0;
26     path[beg]=-1;
27     int pre=beg;
28     for(i=1; i<n; i++)
29     {
30         min=INF;
31         for(j=0; j<n; j++)
32             //下面的加法可能导致溢出,INF不能取太大
33             if(vis[j]==0&&lowcost[pre]+cost[pre][j]<lowcost[j])
34             {
35                 lowcost[j]=lowcost[pre]+cost[pre][j];
36                 path[j]=pre;
37             }
38         for(j=0; j<n; j++)
39             if(vis[j]==0&&lowcost[j]<min)
40             {
41                 min=lowcost[j];
42                 pre=j;
43             }
44         vis[pre]=1;
45     }
46 }
47 void Init()
48 {
49     int i,j;
50     for(i=0; i<N; i++)
51         for(j=0; j<N; j++)
52             cost[i][j]=INF;
53 }
54 
55 int main()
56 {
57  //  freopen("input.txt","r",stdin);
58     int n,m,i,a,b,dis;
59     while(cin>>n>>m&&!(n==0&&m==0))
60     {
61         Init();
62         int lowcost[N];
63         for(i=0; i<m; i++)
64         {
65             cin>>a>>b>>dis;
66             if(cost[a-1][b-1]>dis)
67                 cost[a-1][b-1]=cost[b-1][a-1]=dis;
68         }
69         Dijkstra(lowcost,n,0);
70         cout<<lowcost[n-1]<<endl;
71 //        if( lowcost[n-1] < 0x3F3F3F3F ) cout<<lowcost[n-1]<<endl;
72 //        else cout<<"-1"<<endl;
73     }
74     return 1;
75 }

 

 

posted @ 2013-10-30 10:03  西芒xiaoP  阅读(212)  评论(0编辑  收藏  举报