码迷,mamicode.com
首页 > 其他好文 > 详细

hdu_1874

时间:2014-10-28 15:14:48      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   os   ar   for   sp   div   

很直白的最短路,捡起来dijkstra。每次总是以距离source最近的点向外扩展(这样保证对任意一点n,到达n时总是最短距离)。从而到达sink时是最短距离。

 1 #include<iostream>
 2 #include<queue>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<vector>
 6 #define MAXN 222
 7 struct edge {
 8     int k,w;
 9     bool operator < (const edge &b)const//the order to sort elements in priority queue
10     {
11         return w > b.w;
12     }
13     edge(int kk = 0, int ww = 0)// Constructor
14     {
15         k = kk;
16         w = ww;
17     }
18 };
19 int N, M, A, B, X, S, T;
20 std::vector< std::vector<edge> > G;//a vector in a vector
21 //while you use vector , you don‘t have to create a 2d array, avoid wasting the memory.
22 bool vis[MAXN];
23 
24 int dijkstra(int s, int t)
25 {
26     std::priority_queue<edge> q;
27     edge head(s,0),node;
28     q.push(head);
29     while(q.empty()==false) {
30         head = q.top();//get the element at the front of the priority queue
31         q.pop();//the delete it
32         vis[head.k] = true;//a tag ,this element has been visited, we have get the shortest way from source to it
33         if(head.k == t)
34             return head.w;
35         for(int i = 0; i<G[head.k].size(); i++) {//
36             node.k = G[head.k][i].k;
37             if(vis[node.k]==true)//if the point has been reached , skip it.
38                 continue;
39             node.w = G[head.k][i].w + head.w;
40              q.push(node);//the newly extended point
41         }
42     }
43     return -1;//can not find a way till every element have been visited.
44 // So there is no way from source to sink
45 }
46 
47 int main()
48 {
49 //    freopen("in.txt","r",stdin);
50     while(~scanf("%d%d",&N,&M)) {
51         memset(vis,false,sizeof(vis));
52         G.clear();
53         G.resize(MAXN);
54         while(M--) {
55             scanf("%D%D%D",&A,&B,&X);
56             edge temp;
57             temp.k = B;
58             temp.w = X;
59             G[A].push_back(temp);//two-way road here
60             temp.k = A;
61             G[B].push_back(temp);
62         }
63         scanf("%d%d",&S,&T);
64         printf("%d\n",dijkstra(S, T));
65     }
66 }

 

hdu_1874

标签:style   blog   io   color   os   ar   for   sp   div   

原文地址:http://www.cnblogs.com/takeoffyoung/p/4056660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!