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

1030 Travel Plan (30分)

时间:2020-03-25 13:25:08      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:space   turn   ==   class   return   main   def   i++   alt   

技术图片

 

最短路径问题。一定要注意将visited[u]是否等于0加入判断!很关键,还是没有理解透,所以才忘了加。(第42行和第45行)

其实图相关的题通过率蛮高的...套路题,坑少。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<vector>
 4 #define inf 0x3f3f3f3f
 5 using namespace std; 
 6 struct Edge{
 7     int next,dis,cos;
 8 };
 9 int main()
10 {    
11   int N,M,S,D;
12   scanf("%d%d%d%d",&N,&M,&S,&D);
13   vector<int> V(N);
14   vector<vector<Edge> > E(N);
15   int c1,c2,dis,cos;
16   Edge e;
17   for(int i=0;i<M;i++){
18       scanf("%d%d%d%d",&c1,&c2,&dis,&cos);
19       e.next=c2;
20       e.dis=dis;
21       e.cos=cos;
22       E[c1].push_back(e);
23       e.next=c1;
24       E[c2].push_back(e);
25   }
26   vector<int> visited(N,0);
27   vector<int> pre(N,0);
28   vector<int> distance(N,inf);
29   vector<int> sum(N);
30   distance[S]=0;
31   sum[S]=0;
32   int min,u;
33   for(int i=0;i<N;i++){
34       min=inf;
35       u=S;
36       for(int j=0;j<N;j++){
37           if(visited[j]==0&&min>distance[j]){
38               min=distance[j];
39               u=j;
40           }      
41     }
42     visited[u]=1;//!
43     for(int j=0;j<E[u].size();j++){
44         int v=E[u][j].next;
45         if(visited[v]!=0)//!
46           continue;
47         if(distance[u]+E[u][j].dis<distance[v]){
48             distance[v]=distance[u]+E[u][j].dis;
49             pre[v]=u;
50             sum[v]=sum[u]+E[u][j].cos;
51         }
52         else if(distance[u]+E[u][j].dis==distance[v]){
53             if(sum[u]+E[u][j].cos<sum[v]){
54                 sum[v]=sum[u]+E[u][j].cos;
55                 pre[v]=u;
56             }    
57         }
58     }
59   }
60   vector<int> res;
61   int k=D;
62   while(k!=S){
63       res.push_back(k);
64       k=pre[k];
65   }
66   res.push_back(S);
67   for(int i=res.size()-1;i>=0;i--)
68     printf("%d ",res[i]);
69   printf("%d ",distance[D]);
70   printf("%d",sum[D]);
71   return 0;
72 }

 

1030 Travel Plan (30分)

标签:space   turn   ==   class   return   main   def   i++   alt   

原文地址:https://www.cnblogs.com/wsshub/p/12565507.html

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