POJ 2387 Til the Cows Come Home(dijkstra裸题)

题目链接:http://poj.org/problem?id=2387

题目大意:给你t条边(无向图),n个顶点,让你求点1到点n的最短距离。

解题思路:裸的dijsktra,注意判重边。

代码:

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cctype>
 4 #include<cstring>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<vector>
 8 #include<queue>
 9 #include<set>
10 #include<map>
11 #include<stack>
12 #include<string>
13 #define LC(a) (a<<1)
14 #define RC(a) (a<<1|1)
15 #define MID(a,b) ((a+b)>>1)
16 using namespace std;
17 typedef long long LL;
18 const int INF=0x3f3f3f3f;
19 const int N=1e3+5;
20 
21 int dis[N],cost[N][N];
22 bool used[N];
23 int V,E;
24 
25 void dij(int s){
26     //初始化 
27     for(int i=1;i<=V;i++){
28         dis[i]=INF;
29         used[i]=false;
30     }
31     dis[s]=0;
32     
33     while(true){
34         int k=-1;
35         for(int i=1;i<=V;i++){
36             if(!used[i]&&(k==-1||dis[k]>dis[i]))
37                 k=i;
38         }
39         if(k==-1) break;
40         used[k]=true;
41         for(int i=1;i<=V;i++){
42             dis[i]=min(dis[i],dis[k]+cost[k][i]);
43         }
44     }
45 }
46 
47 int main(){
48     memset(cost,0x3f,sizeof(cost));
49     scanf("%d%d",&E,&V);
50     for(int i=1;i<=E;i++){
51         int a,b,len;
52         scanf("%d%d%d",&a,&b,&len);
53         //判重边 
54         cost[a][b]=cost[b][a]=min(cost[a][b],len);    
55     }
56     dij(1);
57     printf("%d\n",dis[V]);
58     return 0;
59 }

 

posted @ 2017-10-16 16:31  Yeader  阅读(216)  评论(0)    收藏  举报