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

Posted Wally的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nefu-1297 表哥的旅行(最短路问题)相关的知识,希望对你有一定的参考价值。

题目链接:

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 表哥的旅行(最短路问题)的主要内容,如果未能解决你的问题,请参考以下文章

matlab最短路径问题(旅行商模型)—模拟退火算法禁忌搜索算法解决中国省会间最短路径问题

hdu2066 一个人的旅行(最短路)

一个人的旅行 HDU - 2066 (最短路)

hdu2066 一个人的旅行 最短路

最短路luoguP1027Car的旅行路线

哈理工 oj 2122 旅行(map + 最短路dij算法)