1030 Travel Plan (30分)

Posted wsshub

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1030 Travel Plan (30分)相关的知识,希望对你有一定的参考价值。

技术图片

 

最短路径问题。一定要注意将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分)的主要内容,如果未能解决你的问题,请参考以下文章

1030 Travel Plan (30)(30 分)

1030 Travel Plan (30分)

A1030 Travel Plan (30分)

1030 Travel Plan (30 分) 难度: 中 / 知识点: 最短路

1030 Travel Plan (30 分)(最短路径 and dfs)

PAT 1030 Travel Plan[图论][难]