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

hdu 3790 最短路径问题(双重权值,dijkstra算法)

时间:2014-08-14 20:15:49      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   问题   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 

题目大意:题意明了,输出最短路径及其花费。

需要注意的几点:(1)当最短路径相同时,输出最小花费!!!

(2)更新路径的时候要注意更新花费。

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 const int INF=9999999;
 5 int map[1010][1010],Min,n,cost[1010][1010],node[1010],vis[1010];
 6 int pr[1010];
 7 
 8 void set()
 9 {
10     for (int i=1; i<=n; i++)
11     {
12         vis[i]=0;
13         node[i]=INF;
14         pr[i]=INF;
15         for (int j=1; j<=n; j++)
16         {
17             map[i][j]=INF;
18             cost[i][j]=INF;
19         }
20     }
21 }
22 
23 void dijkstra(int m)
24 {
25     int tm=m;
26     vis[m]=1;
27     node[m]=0;
28     pr[m]=0;
29     for (int k=2; k<=n; k++)
30     {
31         Min=INF;
32         int M=INF;
33         for (int i=1; i<=n; i++)
34             if(!vis[i])
35             {
36                 if (node[i]>map[tm][i]+node[tm])
37                 {
38                     node[i]=map[tm][i]+node[tm];
39                     pr[i]=cost[tm][i]+pr[tm];
40                 }
41                 else if(node[i]==map[tm][i]+node[tm])
42                 {
43                     if(pr[i]>cost[tm][i]+pr[tm])
44                     {
45                         node[i]=map[tm][i]+node[tm];
46                         pr[i]=cost[tm][i]+pr[tm];
47                     }
48                 }
49                 if (Min>node[i])
50                 {
51                     M=pr[i];
52                     Min=node[i];
53                     m=i;
54                 }
55                 else if (Min==node[i])
56                 {
57                     if(M>pr[i])
58                     {
59                         M=pr[i];
60                         Min=node[i];
61                         m=i;
62                     }
63                 }
64             }
65         vis[m]=1;
66         tm=m;
67     }
68 }
69 
70 int main ()
71 {
72     int a,b,d,p,m;
73     while(scanf("%d%d",&n,&m),n||m)
74     {
75         set();
76         while (m--)
77         {
78             scanf("%d%d%d%d",&a,&b,&d,&p);
79             if (map[a][b]>d)
80             {
81                 cost[a][b]=cost[b][a]=p;
82                 map[a][b]=map[b][a]=d;
83             }
84             else if (map[a][b]==d)
85             {
86                 if (cost[a][b]>p)
87                     cost[a][b]=cost[b][a]=p;
88             }
89         }
90         scanf("%d%d",&a,&b);
91         dijkstra(a);
92         printf ("%d %d\n",node[b],pr[b]);
93     }
94 }

 

hdu 3790 最短路径问题(双重权值,dijkstra算法),布布扣,bubuko.com

hdu 3790 最短路径问题(双重权值,dijkstra算法)

标签:style   blog   http   color   os   io   for   问题   

原文地址:http://www.cnblogs.com/qq-star/p/3913035.html

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