奇怪的电梯(HDU1548) (Dijkstra)或者(BFS)
问题 E: 奇怪的电梯
时间限制: 1 Sec 内存限制: 64 MB
提交: 35 解决: 16
[提交][状态][讨论版]
题目描述
有一天桐桐做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字K;(0≤Ki≤N)。电梯只有四
个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了Ki
(K1=3,K2=3,…),从一楼开始。在一楼,按“上,”可以到4楼,按“下”是不起作用的,因为没有-2楼。那么,从A楼到B楼至少要按几次按钮
呢?
输入
第1行为三个正整数,表示N,A,B(1≤N≤200,1≤A,B≤N);
第2行为N个正整数,表示Ki。
输出
1行,即最少按键次数,若无法到达,则输出-1。
样例输入
5 1 5
3 3 1 2 5
样例输出
3
先试试Dijkstra,发现过了,代码如下
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; const int inf = <<; int n;
int map[][];
int a[],cnt;
int vis[],cast[]; void Dijkstra(int s,int e)
{
int i,j,min,pos;
memset(vis,,sizeof(vis));
for(i = ; i<n; i++)
cast[i] = map[s][i];
cast[s] = ;
vis[s] = ;
for(i = ; i<n; i++)
{
min = inf;
for(j = ; j<n; j++)
{
if(cast[j]<min && !vis[j])
{
pos = j;
min = cast[j];
}
}
if(min == inf)
break;
vis[pos] = ;
for(j = ; j<n; j++)
{
if(cast[pos]+map[pos][j]<cast[j] && !vis[j])
cast[j] = cast[pos]+map[pos][j];
}
}
} int main()
{
int i,j,s,e,x,y;
scanf("%d",&n);
scanf("%d%d",&s,&e);
s--,e--;
for(i = ; i<n; i++)
for(j = ; j<n; j++)
map[i][j] = inf;
for(i = ; i<n; i++)
{
scanf("%d",&a[i]);
if(i+a[i]<n)
map[i][i+a[i]] = ;
if(i-a[i]>=)
map[i][i-a[i]] = ;
}
Dijkstra(s,e);
printf("%d\n",cast[e]==inf?-:cast[e]);
return ;
}
后来用BFS交了一发,也过了。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include <queue>
#define ll long long
#define rep(i,m,n) for(i=m;i<=n;i++)
#define inf 0x3f3f3f3f
const int maxn=1e3+;
using namespace std;
int n,m,a,b;
const int dis[][]={,,,,-,,,-};
int q[maxn],vis[maxn];
int main()
{
int i,j,k,t;
queue<int>p;
scanf("%d%d%d",&n,&a,&b);
vis[a]=;
for(i=;i<=n;i++)scanf("%d",&q[i]);
p.push(a);
while(!p.empty())
{
int now=p.front(),l=now-q[now],r=now+q[now];
p.pop();
if(l>=&&!vis[l])p.push(l),vis[l]=vis[now]+;
if(r<=n&&!vis[r])p.push(r),vis[r]=vis[now]+;
if(l==b||r==b)break;
}
printf("%d\n",vis[b]-);
//system("pause");
return ;
}
奇怪的电梯(HDU1548) (Dijkstra)或者(BFS)的更多相关文章
- hdu1548 奇怪的电梯 dfs dijkstra bfs都可以,在此奉上dfs
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/5706/ 简单的规定深度进行搜索,代码如下: #include<bits/stdc++.h> usin ...
- TYVJ P3522 &&洛谷 P1135 奇怪的电梯 Label:bfs
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...
- 洛谷 P1135 奇怪的电梯 【基础BFS】
题目链接:https://www.luogu.org/problemnew/show/P1135 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第 i 层 ...
- cogs 364. [HDU 1548] 奇怪的电梯 Dijkstra
364. [HDU 1548] 奇怪的电梯 ★ 输入文件:lift.in 输出文件:lift.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 呵呵,有一天我做了 ...
- 【DFS与BFS】洛谷 P1135 奇怪的电梯
题目:奇怪的电梯 - 洛谷 (luogu.com.cn) 因为此题数据范围较小,有dfs及bfs等多种做法. DFS 比较正常的dfs,注意vis数组一定要回溯,不然会漏情况 例如这个数据 11 1 ...
- 洛谷P1135 奇怪的电梯【bfs】
题目:https://www.luogu.org/problemnew/show/P1135 题意: 一共有n层楼,在第i层可以往上或往下$k_i$层. 问从$a$层到$b$层至少需要多少乘多少次电梯 ...
- 【DFS】奇怪的电梯
奇怪的电梯 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N)上有一个数字K:(0≤Ki≤N).电梯只有四 个按钮:开,关,上,下.上下的层 ...
- 洛谷P1135 奇怪的电梯
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼 (1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮: ...
- 洛谷 P1135 【奇怪的电梯】
题库 :洛谷 题号 :1135 题目 :奇怪的电梯 link :https://www.luogu.org/problemnew/show/P1135 一. 动态规划 : 思路 :这道题用动规来解决其 ...
随机推荐
- 介绍几个java把网页报存为图片的框架
java在图像这一块非常弱.用java实现java截图倒不难,原理吗就是把当前屏幕存成一个图,然后获取鼠标拉去的想去位置然后把截取的图保存到panel里边,再生成图片即可:示例代码就不展示了,网上很多 ...
- ProcessOn:功能强大的在线作图工具(HTML5)
ProcessOn是一款专业作图人员的社交网络,这里汇聚很多业界专家.学者,同时他们分享的作品又形成一个庞大的知识图库,你在学习专业知识的同时还可以结交一些志同道合的新朋友. ProcessOn核心设 ...
- 使用siege进行Web压力测试
因为最近公司线上node项目出一些不稳定的情况,考虑在这方面能不能做进一步的优化,既然要做优化首先要知道问题出在哪里? 因为暂无法定位是node层问题还是api层出现问题,由于在开发环境小并发量程序运 ...
- Oracle 12c与GoldenGate 12c的一些问答
1. 如何知道一个12c DB是否为容器数据库?(1) container DBSQL> select cdb from v$database;CDB---YES (2) non contain ...
- php中遍历二维数组并以表格的形式输出
一.索引数组 <?php //使用array()语句结构将联系人列表中所有数据声明为一个二维数组,默认下标是顺序数字索引 $contact1 = array( //定义外层数组 array(1, ...
- poj2129 dp
//Accepted 320 KB 47 ms //dp //dp[i][j]=1 表示用s1的前i个,s2的前j个字符能构成s3的前i+j-1个字符 //dp[i][j]=0 表示构不成 //dp[ ...
- 团队博客——Sprint计划会议1
每日Scrum:第一天 会议时间:4.14.晚八点半 会议地点:基础教学楼一楼大厅 小组成员:郭庆樑,林彦汝,张金 认领人—使团队成员分工合作,保持团队的积极性. ID 名称(NAME) 重要性(IM ...
- hdu 2077
PS:汉诺塔问题....找规律...观察发现,先是小的移动到B,然后大的移动到C(两步),然后小的移动到C,完成.刚开始就以为是f(n)=2f(n-1)+2..然而,小的移动一步是需要f(n)=3f( ...
- iOS多线程之NSOperation,NSOperationQueue
使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...
- UIkit框架之UIimage
1.继承链:NSObject 2.以下有三种方法来创建图片对象 (1) imageNamed:inBundle:compatibleWithTraitCollection:从image asset或者 ...