大家好,又见面了,我是你们的朋友全栈君。
奇怪的电梯
【问题描述】
某栋大楼有一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第i层楼(1≤i<N)上有一个数字K(≤K≤N)电梯只有四个按钮:开、关、上、下。上、下的层数等于当前楼层上 的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:33125代表了Ki(K1=3,K2=3,…),从一层开始。在一层按“上”可以到4层,按“下”是不起作用的,因为没有-2层。那么从A层到B层至少要按几次按钮呢?
【输入格式】
第1行为3个用1个空格隔开的正整数,表示N、A、B(l≤N≤200,1≤A,B≤N)。
第2行为N个用1个空格隔开的正整数,表示K。
【输出格式】
一行一个数,表示最少按键次数。若无法到达,则输出“-1”。
【输入样例】
5 1 5
3 3 1 2 5
【输出样例】
3
思路
学校网站的一道题
鸽了几天过端午去了
今天水一道最简单的标记
代码
#include<bits/stdc++.h>//实用头文件
using namespace std;
int n,m,k,s=(1<<30);
int a[201];
bool b[201];
inline void dfs(int now,int sum)
{
if(now==k)
{
s=min(s,sum);
}
else if(sum<=s)
{
b[now]=1;//标记当前楼层
if(now+a[now]<=n && b[now+a[now]]==0)//上,要是没去过
{
dfs(now+a[now],sum+1);
}
if(now-a[now]>=1 && b[now-a[now]]==0)//下,也是没去过
{
dfs(now-a[now],sum+1);
}
b[now]=0;//取消标记
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int i,j;
cin>>n>>m>>k;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
b[m]=1;//第m层需要标记
dfs(m,0);
if(s==(1<<30))
{
cout<<-1<<endl;
}
else
{
cout<<s<<endl;
}
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130357.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...