奇怪的电梯

奇怪的电梯奇怪的电梯【问题描述】某栋大楼有一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第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≤

大家好,又见面了,我是你们的朋友全栈君。

奇怪的电梯

【问题描述】

某栋大楼有一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130357.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机等级考试–二级Java的知识点大全

    计算机等级考试–二级Java的知识点大全第一章数据结构与算法【考点1】算法的基本概念1、算法:是指一组有穷的指令集,是解题方案的准确而完整的描述。算法不等于程序,也不等于计算方法。2、算法的基本特征:1)确定性,算法中每一步骤都必须有明确定义,不允许有多义性;2)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止;3)可行性,算法原则上能够精确地执行;4)拥有足够的情报。3、算法的组成…

    2022年5月2日
    41
  • C#开发之——ParameterizedThreadStart(14.4)「建议收藏」

    C#开发之——ParameterizedThreadStart(14.4)「建议收藏」一概述在C#语言中使用ParameterizedThreadStart创建进程,首先需要创建ParameterizedThreadStart委托的实例,然后再创建Thread类的实例<spanstyle=”color:#333333″>ParameterizedThreadStartpts=newParameterizedThreadStart(方法名);Threadt=newThread(pts);</span><!–more–>

    2022年7月15日
    18
  • 关于getchar的用法及实例解析

    关于getchar的用法及实例解析getchar——读取字符的函数intgetchar(void)返回类型为int,参数为void.有人可能会有疑惑,getchar既然是读取字符的,为什么返回类型是int呢?1、getchar其实返回的是字符的ASCII码值(整数)。2、getchar在读取结束或者失败的时候,会返回EOF。EOF意思是endoffile,本质上是-1.下面我们一起来看看下面这段代码什么意思#include<stdio.h>intmain(){ intch=0; wh

    2022年10月19日
    4
  • 常用渗透测试工具(数据包渗透测试)

    BurpSuiteBurpSuite能高效率地与多个工具一起工作,例如:一个中心站点地图是用于汇总收集到的目标应用程序信息,并通过确定的范围来指导单个程序工作。在一个工具处理HTTP请求和响应时,它可以选择调用其他任意的Burp工具。例如:代理记录的请求可被Intruder用来构造一个自定义的自动攻击的准则,也可被Repeater用来手动攻击,也可被Scanner用来分析漏洞,或者被Spider(网络爬虫)用来自动搜索内容。应用程序可以是“被动地”运行,而不是产生大量的自动请求。Burp

    2022年4月18日
    121
  • js中splice方法_js删除数组中指定元素

    js中splice方法_js删除数组中指定元素数组对象splice方法:arr.splice(1,1);这种方式数组长度相应改变,但是原来的数组索引也相应改变

    2022年9月1日
    4
  • 长轮询的使用实现_python 轮询

    长轮询的使用实现_python 轮询轮询(Polling):是指不管服务器端有没有更新,客户端(通常是指浏览器)都定时的发送请求进行查询,轮询的结果可能是服务器端有新的更新过来,也可能什么也没有,只是返回个空的信息。不管结果如何,客户端处理完后到下一个定时时间点将继续下一轮的轮询。长轮询(LongPolling):长轮询的服务其客户端是不做轮询的,客户端在发起一次请求后立即挂起,一直到服务器端有更新的时候,服务器才会主动推送信息到…

    2022年10月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号