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

nefu-1297 表哥的旅行(最短路问题)

时间:2016-09-09 20:39:41      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1197

注意事项:

1.初始数组长度为零

2.同样路径可能花费不同的时间

3.运用变形的Dijkstra算法

代码思路:

先初始化二维数组ecot再输入数据并更新二维数组e和最大的cot,接着输入能到达的点fly并把e[fly][0]e[0][fly]初始化为0,最后输入想要到达的f,然后运用Dijkstra算法得出到达各点的最短路数组,最后找出最短路数组的最小值ans。

代码如下:

技术分享
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #define inf  1<<30
 6 using namespace std;
 7 
 8 int e[1205][1205];
 9 int a,b,t,n,m,l,cot,ans,fly[1205],f[1205],book[1205],dis[1205];
10 int dsj()
11 {
12     int u,pos;
13     memset(book,0,sizeof(book));
14     book[0]=1;
15     for(int i=0;i<=cot;i++)
16     dis[i]=e[i][0];
17     for(int i=1;i<=cot;i++)
18     {
19         pos=inf;
20         for(int j=1;j<=cot;j++)
21         {
22             if(dis[j]<pos&&book[j]==0)
23             {
24                 pos=dis[j];u=j;
25             }
26         }
27         book[u]=1;
28         for(int v=1;v<=cot;v++)
29         {
30             if(!book[v]&&dis[v]>dis[u]+e[u][v])
31             dis[v]=dis[u]+e[u][v];     
32         }
33     }
34     return 0;
35 }
36 int main()
37 {
38     while(~scanf("%d%d%d",&n,&m,&l))
39     {
40         cot=0;
41         for(int i=0;i<1111;i++)
42         {
43             for(int j=0;j<1111;j++)
44             e[i][j]=inf;
45             e[i][i]=0;
46         }
47         for(int i=0;i<n;i++)
48         {
49             scanf("%d%d%d",&a,&b,&t);
50             if(t<e[a][b])
51             e[a][b]=e[b][a]=t;
52             if(cot<a||cot<b)
53             cot=a>b?a:b;
54         }
55         for(int i=0;i<m;i++)
56         {
57             scanf("%d",&fly[i]);
58             e[fly[i]][0]=e[0][fly[i]]=0;
59         }
60         for(int i=0;i<l;i++)
61         scanf("%d",&f[i]);
62         dsj();
63         ans=inf;
64         for(int i=0;i<l;i++)
65         if(ans>dis[f[i]])
66         ans=dis[f[i]];
67         if(ans==inf)
68         printf("NO\n");
69         else
70         printf("%d\n",ans);
71     }
72     return 0;
73 }
View Code

 

nefu-1297 表哥的旅行(最短路问题)

标签:

原文地址:http://www.cnblogs.com/wang-ya-wei/p/5857759.html

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