HDU 1548 A strange lift (Dijkstra)
A strange lift
http://acm.hdu.edu.cn/showproblem.php?pid=1548
Here comes the problem: when you are on floor A,and you want to go to floor B,how many times at least he has to press the button "UP" or "DOWN"?
The first line contains three integers N ,A,B( 1 <= N,A,B <= 200) which describe above,The second line consist N integers k1,k2,....kn.
A single 0 indicate the end of the input.
3 3 1 2 5
0
解题代码:
// File Name: A strange lift 1548.cpp
// Author: sheng
// Created Time: 2013年07月19日 星期五 17时13分57秒 #include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std; const int INF = 0x3fffffff;
const int max_n = ;
int k[max_n];
int f[max_n][max_n], vis[max_n];
int dis[max_n]; int n, A, B; void Dijstra()
{
memset(vis, , sizeof (vis));
for (int i = ; i <= n; i ++)
dis[i] = f[A][i];
vis[A] = ;
for (int i = ; i <= n; i ++)
{
int min = INF;
int k = -;
for (int j = ; j <= n; j ++)
{
if (!vis[j] && min > dis[j])
{
min = dis[j];
k = j;
}
}
if (k == -)
return;
vis[k] = ;
for (int j = ; j <= n; j ++)
if (!vis[j] && dis[j] > dis[k] + f[k][j])
dis[j] = dis[k] + f[k][j];
} } int main ()
{
while (~scanf ("%d", &n) && n)
{
for (int i = ; i <= n; i ++)
for (int j = ; j <= n; j ++)
f[i][j] = INF;
scanf ("%d%d", &A, &B);
for (int i = ; i <= n; i ++)
scanf ("%d", &k[i]);
for (int i = ; i <= n; i ++)
{
if (i - k[i] >= )
f[i][i - k[i]] = ;
if (i + k[i] <= n)
f[i][i + k[i]] = ;
}
Dijstra();
/* for (int i = 1; i <= n; i ++)
for (int j = 1; j <= n; j ++)
for (int k = 1; k <= n; k ++)
if (f[j][k] > f[j][i] + f[i][k])
f[j][k] = f[j][i] + f[i][k];
*/
if (A == B)
printf ("0\n");
else if (dis[B] == INF)
printf("-1\n");
else printf ("%d\n", dis[B]);
}
return ;
}
HDU 1548 A strange lift (Dijkstra)的更多相关文章
- hdu 1548 A strange lift (dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 题目大意:升降电梯,先给出n层楼,然后给出起始的位置,即使输出从A楼道B楼的最短时间. 注意的几 ...
- HDU 1548 A strange lift(Dijkstra,简单BFS)
题目大意: 电梯有两个选项向上或向下,每层楼有一个参数ki,代表电梯可以再该楼层的基础上向上或向下移动ki层,限制条件是向上不能超过楼层总数n,向下不能少于一.输入总层数n和当前所在层数以及目标层数, ...
- hdu 1548 A strange lift
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Description There is a strange li ...
- HDU 1548 A strange lift (最短路/Dijkstra)
题目链接: 传送门 A strange lift Time Limit: 1000MS Memory Limit: 32768 K Description There is a strange ...
- hdu 1548 A strange lift 宽搜bfs+优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 There is a strange lift.The lift can stop can at ...
- HDU 1548 A strange lift (bfs / 最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 A strange lift Time Limit: 2000/1000 MS (Java/Ot ...
- HDU 1548 A strange lift 搜索
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- hdu 1548 A strange lift (bfs)
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- HDU 1548 A strange lift(BFS)
Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...
随机推荐
- 算法系列8《Base64》
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单 ...
- EMVTag系列4《5A 应用主账号》
L:var.最大10 -M(必备):此数据应存在并提供给终端,终端在读应用数据过程中,如果没有读到必备数据,终端中止交易:等同磁条上的应用主帐户. 银行卡号一般是16位或者19位.由如下三部分构成: ...
- JavaScript 字符串处理详解【转自:http://www.cnblogs.com/mondLei/p/4096855.html】
一.创建字符串 创建一个字符串,将一组字符串用引号包起来,将其赋值给一个字符串变量. var JsStr="Hello,JavaScript String!"; 二.字 ...
- sublime3快捷键
Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数名等. ...
- sharepoint 浏览页面导航不正确
问题是这样的: sharepoint网站上建立一个二级站点,然后在网站中创建几个页面.当浏览二级网站的页面的时候,顶部导航的位置总是在首页的地方,而不是我的二级站点的导航位置. 解决方法: 转到网站集 ...
- 二、secureCRT的 使用过程
准备工作: win7与linux能互相ping通 linux安装了ssh被登陆服务 关闭window 防火墙,,控制面板 下载secureCRT 参考资料:http://zhidao.baidu.co ...
- pagebar
public static string GetPageBarStr(int pageIndex, int pageSize, int pageCount, int recordCount) ...
- Android -- 倒计时的实现
CountDownTimer CountDownTimer这个 ...
- Spring事务总结
事务是什么? 事务就是用来解决类似问题,事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败,那么事务就会回滚到最开始的状态,仿佛什么都没有发生过.在企业级应 ...
- 【转】eclipse技巧1
俗话说的好啊,“工于利启事,必先善其器”,如果说你的编程功底是一个枪法的话,那么强大的eclipse就是android战士们最好的武器. 这里,我们来总结eclipse的使用技巧,从而使我们的编程达到 ...