Dijkstra(hihocoder第二十三周)

描述

万圣节的早上,小Hi和小Ho在经历了一个小时的争论后,终于决定了如何度过这样有意义的一天——他们决定去闯鬼屋!

在鬼屋门口排上了若干小时的队伍之后,刚刚进入鬼屋的小Hi和小Ho都颇饥饿,于是他们决定利用进门前领到的地图,找到一条通往终点的最短路径。

鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道路。那么小Hi和小Ho至少要走多少路程才能够走出鬼屋去吃东西呢?

提示:顺序!顺序才是关键。

输入

每个测试点(输入文件)有且仅有一组测试数据。

在一组测试数据中:

第1行为4个整数N、M、S、T,分别表示鬼屋中地点的个数和道路的条数,入口(也是一个地点)的编号,出口(同样也是一个地点)的编号。

接下来的M行,每行描述一条道路:其中的第i行为三个整数u_i, v_i, length_i,表明在编号为u_i的地点和编号为v_i的地点之间有一条长度为length_i的道路。

对于100%的数据,满足N<=10^3,M<=10^4, 1 <= length_i <= 10^3, 1 <= S, T <= N, 且S不等于T。

对于100%的数据,满足小Hi和小Ho总是有办法从入口通过地图上标注出来的道路到达出口。

输出

对于每组测试数据,输出一个整数Ans,表示那么小Hi和小Ho为了走出鬼屋至少要走的路程。

样例输入

5 23 5 4
1 2 708
2 3 112
3 4 721
4 5 339
5 4 960
1 5 849
2 5 98
1 4 99
2 4 25
2 1 200
3 1 146
3 2 106
1 4 860
4 1 795
5 4 479
5 4 280
3 4 341
1 4 622
4 2 362
2 3 415
4 1 904
2 1 716
2 5 575

样例输出

123

本题中一点到另一点中可能存在多条路径,可以在输入时取最小值解决。

 1 #include <cstdio>
 2 #include "iostream"
 3 #include <algorithm>
 4 using namespace std;
 5
 6 const int inf = 1<<30;
 7 const int MAX = 10010;
 8 int n,m;
 9 int map[MAX][MAX];
10 int vis[MAX],cast[MAX];
11
12 void Dijkstra(int s,int e)
13 {
14     int i,j,min,pos;
15     for(i = 0; i<n; i++)
16         cast[i] = map[s][i];
17     cast[s] = 0;
18     vis[s] = 1;
19     for(i = 1; i<n; i++)
20     {
21         min = inf;
22         for(j = 0; j<n; j++)
23         {
24             if(cast[j]<min && !vis[j])
25             {
26                 pos = j;
27                 min = cast[j];
28             }
29         }
30         if(min == inf)
31             break;
32         vis[pos] = 1;
33         for(j = 0; j<n; j++)
34         {
35             if(cast[pos]+map[pos][j]<cast[j] && !vis[j])
36                 cast[j] = cast[pos]+map[pos][j];
37         }
38     }
39 }
40
41 int main()
42 {
43     int i,j,s,e,x,y;
44     cin >> n >> m >> s >> e;
45         s--,e--;
46         for(i = 0; i<n; i++)
47             for(j = 0; j<n; j++)
48                 map[i][j] = inf;
49         for(i = 0; i< m; i++)
50         {
51             int a,b,c;
52             cin >> a >> b >> c;
53             a--,b--;
54             if (c < map[a][b])
55             map[a][b] = map[b][a] = c;
56         }
57         Dijkstra(s,e);
58         cout << cast[e] << endl;
59     return 0;
60 }

代码君

时间: 2024-07-31 14:32:24

Dijkstra(hihocoder第二十三周)的相关文章

hiho一下 第二十三周---题目1 : 最短路径&#183;一

题目1 : 最短路径·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的早上,小Hi和小Ho在经历了一个小时的争论后,终于决定了如何度过这样有意义的一天--他们决定去闯鬼屋! 在鬼屋门口排上了若干小时的队伍之后,刚刚进入鬼屋的小Hi和小Ho都颇饥饿,于是他们决定利用进门前领到的地图,找到一条通往终点的最短路径. 鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道

Eular质数筛法-hiho一下 第九十三周

Eular质数筛法 hihocoder第九十三周 输入 第1行:1个正整数n,表示数字的个数,2≤n≤1,000,000. 输出 第1行:1个整数,表示从1到n中质数的个数 c++代码 #include <iostream> #include <sstream> #include <fstream> #include <string> #include <vector> #include <deque> #include <qu

第十二、十三周新总结

第十二.十三周总结 ——————————————王林 学科 WEB 数据结构 计算机网络基础 课外读物 进度 第十章.第十一章 第六章后半部分,第七章前半部分 项目6.项目7 <黑客攻防从新手到高手> <Flash MX> 主要内容 第十二周.第十三周主要学习了CSS3的知识.包括CSS3字体与文本的相关属性.设计立体文本.美化背景与边框.设置背景.边框设置.以及综合实例. 两周内.,重点学习了二叉树等. 十二周内,学习了无线局域网的基础知识.无线网络的硬件设备ji组网模式及认证I

20145311 《信息安全系统设计基础》第十三周学习总结

20145311 <信息安全系统设计基础>第十三周学习总结 教材学习内容总结 第十一章 网络编程 客户端-服务器编程模型 一个应用是由一个服务器进程和一个或多个客户端进程组成 服务器进程 -> 管理某种资源 -> 通过操作这种资源来为它的客户端提供某种服务 基本操作:事务 一个客户端-服务器事务由四步组成: 当一个客户端需要服务时,向服务器发送一个请求,发起一个事务. 服务器收到请求后,解释它,并以适当的方式操作它的资源. 服务器给客户端发送一个相应,并等待下一个请求. 客户端收到

学习进度条(十三周)

本周主要是对上周查“水王”的继续(查找三个“水王”),以及开始团队项目的第二次冲刺阶段.   第十三周 所花时间(包括上课) 上课2小时,课后10小时 代码量(行) 200+ 博客量 4 了解到的知识点 软件工程的质量

2017-2018-1 20155302 第十三周作业

2017-2018-1 20155302 第十三周作业 重新精学第八章异常控制流以及系统级I/O相关知识 数据流:只能以事先规定好的顺序被读取一次的数据的一个序列. 控制流:控制转移序列叫做处理器的控制流. 异常控制流:现代系统通过使控制流发生突变做出反应的突变. 教材内容精学及回顾 8.1异常 异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现. 异常就是控制流中的突变,用来响应处理器状态中的某些变化. 系统中可能的每种类型的异常都分配了一个唯一的非负整数的异常号,其中一些号

2017-2018-1 20155310 《信息安全系统设计基础》第十三周学习总结

2017-2018-1 20155310 <信息安全系统设计基础>第十三周学习总结 教材学习内容总结 8.2进程 进程是计算机科学中最深刻最成功的概念之一.系统中的每个程序都是运行在某个进程的上下文中的.(上下文是由程序正确运行所需的状态组成的) ?一个独立的逻辑控制流 ?一个逻辑流的执行在时间上与另一个流重叠,称为并发流. ?多个流并发地执行的一般现象称为冰法. ?多任务也叫作时间分片:一个进程和其他进程轮流运行的概念称为多任务. ?并行流是并发流的一个真子集. ?私有地址空间 ?上下文切换

# 2017-2018-1 20155337《信息安全系统设计基础》第十三周学习总结

2017-2018-1 20155337<信息安全系统设计基础>第十三周学习总结 我认为本书重要的一章也是我学的比较不错的一章就是第六章 --存储器层次结构. 存储技术 1. 基本的存储技术包括随机存储器(RAM).非易失性存储器(ROM)和磁盘.RAM分静态RAM(SRAM)和动态RAM(DRAM).SRAM快些,也贵些,主要用做CPU芯片上的高速缓存,也可以用作芯片下的高速缓存.DRAM慢些,便宜些,主要用作驻村和图形帧缓冲区.ROM也叫做只读存储器,即使在断电的情况下,也能保持他们的信息

20155317 《信息安全系统设计基础》第十三周周学习总结

20155317 <信息安全系统设计基础>第十三周周学习总结 一.UNIX I/O 在UNIX系统中有一个说法,一切皆文件.所有的I/O设备,如网络.磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行.这种将设备映射为文件的方式,允许UNIX内核引出一个简单.低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行. 打开文件 打开文件操作完成以后才能对文件进行一些列的操作,打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作