注意:

  1:因为两点之间可能有多条路,所以更新路径长度的时候做一次判断

  if(time < mat[a][b])
    mat[a][b] = mat[b][a] = time;

  2:因为主函数中的数组实际上是在栈中存储的,而栈中内存有限,所以过大的数组不能在栈中开,要设置为全局变量

  比如此题中的矩阵就是10的六次方,我刚开始开到主函数中就不能运行

  3:dijkstra算法记得初始化任意两点之间的距离为无穷

  另外题目还有一个小技巧,在代码的注释中解释

Description

虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。

Input

输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个; 
接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路) 
接着的第T+1行有S个数,表示和草儿家相连的城市; 
接着的第T+2行有D个数,表示草儿想去地方。

Output

输出草儿能去某个喜欢的城市的最短时间。

Sample Input

6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10

Sample Output

9
#include <iostream>
#include <stdio.h>
using namespace std;#define MAXN 1002
#define inf 1000000000
int mat[MAXN][MAXN];//数组太大所以要定义成全局变量,一定要注意注意
typedef int elem_t;
/*这道题实际上可以用小技巧转化为dijkstra算法草儿从家里出发,可以去临近城市坐车,那么就可以把草儿家看作起点,草儿家里到所有车站的时间记为0,这样起点就只有一个,如果把坐车的城市看作起点那就要比较很多次因为草儿的目的地也有很多,要求所花时间最短的目的地所花的时间那么就可以设置一个虚拟的目的地,让草儿所有想去的地方到这个虚拟的目的地的距离为0这样求得的草儿家到虚拟目的地的时间就是题目所要的时间
*/
void dijkstra(int n, int s, elem_t min[], elem_t pre[])
{int v[MAXN], i, j, k;for(i = 0; i < n; i++)min[i] = inf, v[i] = 0, pre[i] = -1;for(min[s] = 0, j = 0; j < n; j++){for(k = -1, i = 0; i < n; i++){if(!v[i] && (k == -1 || min[i] < min[k])){k = i;}}for(v[k] = 1, i = 0; i < n; i++){if(!v[i] && min[k] + mat[k][i] < min[i])min[i] = min[k] + mat[pre[i] = k][i];}}
}
int main()
{int t, s, d;int min[MAXN], pre[MAXN];while(scanf("%d%d%d", &t, &s, &d) != EOF){int a, b, time;//初始化任意两点之间的距离为无穷for(int i = 0; i <= MAXN; i++){for(int j = 0; j <= MAXN; j++){mat[i][j] = mat[j][i] = inf;}}for(int i = 0; i < t; i++){scanf("%d%d%d", &a, &b, &time);if(time < mat[a][b])//mat[a][b] = mat[b][a] = time;}int start, e;for(int i = 0; i < s; i++){scanf("%d", &start);mat[0][start] = mat[start][0] = 0;}for(int j = 0; j < d; j++){scanf("%d", &e);mat[e][1001] = mat[1001][e] = 0;}dijkstra(1002, 0, min, pre);printf("%d\n", min[1001]);}return 0;
}

转载于:https://www.cnblogs.com/rain-1/p/5673417.html

一个人的旅行(用小技巧转化为dijkstra算法)相关推荐

  1. 竖向图片插入_Word小技巧:让你的图片文字排版更有创意

    想在头条中发表文章或者写论文,插入的图片太单调?今天小编就简单跟大家分享几个小技巧,图片搭配文字让你的版面更有可读性. 第一种:最简单的横向文字排版 具体做法:在word中插入图片后,插入一个文本框后 ...

  2. 6个有效激励合作伙伴和促进推荐的小技巧

    合作伙伴计划已被证明是进入市场的策略,可以帮助提高盈利能力,同时推荐可以提高品牌知名度.扩展新市场,并且让你的业务销售变得更容易.但同时让合作伙伴向朋友和其他企业推荐是需要对您的公司和您的品牌有强有力 ...

  3. IDEA Intellij小技巧和插件

    博客分类: 编程基础 ideavim  使用IDEA Intellij已有两年,在此罗列一下在实践中觉得能有效提升开发效率的一些小技巧和插件. 1. 重设移动键  方向键和Home/End键离基键太远 ...

  4. 2019-2020年网络攻击事件及防范网络攻击小技巧

    2019-2020年网络攻击事件 由于数据泄露.高危漏洞.网络攻击以及相关的网络犯罪呈现新的变化,个人安全意识缺乏.企业安全投入不足,也加重了网络安全事件所带来的损失和影响. 案例一:勒索病毒攻击部分 ...

  5. oppoR17手机计算机的隐藏功能,小技巧隐藏大“智慧”,原来OPPO R17还有这些实用功能...

    原标题:小技巧隐藏大"智慧",原来OPPO R17还有这些实用功能 智能手机在人们生活中所扮演的角色越来越重要,无论是工作学习,还是休闲娱乐,都已经离不开手机:随着系统逐渐完善,功 ...

  6. 小红书推广引流的5个小技巧_云媒易

    疫情后时代,互联网购物的狂潮久久无法平息,甚至有愈演愈烈之势.女性作为购物浪潮中的主要消费群体,把握她们的需求是非常重要的,特别是在一些女性群体的聚集地,比如小红书,就是很多品牌营销的战场之一. 相信 ...

  7. 不藏了!分享100个Python小技巧!!

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等 ...

  8. 【技巧总结】——关于不知道放到哪里的小技巧

    [技巧总结]--关于不知道放到哪里的小技巧 折半搜索 分治 0,1,-1转化 模型转换 [ExtendingSetofPointsExtending\;Set\;of\;PointsExtending ...

  9. 2022邮箱如何发送群发邮件?邮件群发平台软件哪个好?一文get群发小技巧

    生活处处有惊喜,软件APP功能处处都有小技巧 相信因为疫情有好多人都和我一样居家办公,这是就对电脑的硬件以及工作中经常使用的一些软件的要求就比较高了,比如邮箱的容量,发信速度等等都可能影响和同事客户的 ...

  10. 《EVE》关于电子战的小技巧

    <EVE>关于电子战的小技巧 作者: pcgames 竹林 ECCM增强的信号强度最大值为100%,不管用什么方式进行增强,都不会超过100%信号强度.如果舰船已经被干扰,无论如何增强,都 ...

最新文章

  1. 全面支持三大主流环境 |百度PaddlePaddle新增Windows环境支持
  2. 最大流 ---- 最小路径覆盖 ---- P2765魔术球问题(网络流24题)
  3. 十年磨一剑,王坚自研的MaxCompute如何解决世界级算力难题
  4. mysql自带压测工具--mysqlslap
  5. 华为 P30系列最高补贴1200元!华为开启以旧换新服务了
  6. linux6 安装oracle11g
  7. Project Euler 3 Largest prime factor
  8. static、const、static const分析
  9. dojo省份地市级联之地市Dao接口类(四)
  10. How far away ? HDU - 2586 trajan算法lca
  11. 摄影曝光基础——光圈、快门、ISO
  12. Virtual Table — RTTI — typeinfo dynamic_cast 模板编程 orocos OperationCaller 类的设计
  13. win10企业版|激|活|码
  14. 《P2SGrad Refined Gradients for Optimizing Deep Face Models》论文阅读
  15. 红米k50电竞版和红米k40游戏增强版哪个好 参数对比
  16. 【C语言】猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想……
  17. 室外AP设备的防雷接地
  18. iOS底层原理:weak的实现原理
  19. 深度学习应用在图像分割上的网络模型概述
  20. Nginx实现前后端分离(springboot+vue)+双机互备

热门文章

  1. 2018.09.14python学习第四天part3
  2. Node.js nvshens图片批量下载爬虫 1.00
  3. 数据库死锁,导致CPU异常增长
  4. Swift 数据类型(三)
  5. web service中配置tcp/ip监视器
  6. Android CI with jenkins in ubuntu
  7. echarts--(1)--基本使用
  8. linux 服务编程,Linux高性能服务编程(I/O复用)
  9. cv方向有哪些_【星球知识卡片】视频分类与行为识别有哪些核心技术,对其进行长期深入学习...
  10. iphone查看删除的短信_手机里的短信不小心删除了怎么才能恢复?此文为你解答...