奇怪的电梯

奇怪的电梯奇怪的电梯【问题描述】某栋大楼有一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃

    【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃

    2022年1月16日
    39
  • win7任务管理器快捷键是什么

    win7任务管理器快捷键是什么根据小编的观察与发现,发现有些小伙伴不是因为不使用快捷键,而是不知道任务管理器的快捷键。所以为了帮助这些小伙伴,小编今天就来告诉你们打开任务管理器的快捷键是什么。我们的电脑其实在打开一些应用的时候,是有快捷键的。但是往往都是因为我们不知道快捷键是什么,所以才会没有用。所以今天小编就来告诉你们打开任务管理器的快捷键是什么。方法一:任务管理器打开的快捷键:ctrl+alt…

    2022年6月18日
    39
  • [图文讲解]redis命令keys和scan的区别[通俗易懂]

    [图文讲解]redis命令keys和scan的区别

    2022年2月19日
    119
  • 布朗运动 金融学_布朗运动数学定义

    布朗运动 金融学_布朗运动数学定义作者:郑连虎来源:阿虎定量笔记正文:巴舍利耶:金融数学之父——要点:布朗运动、有效市场假说即使在信息爆炸的今天,想要了解法国数学家路易斯·巴舍利耶(LouisBachelier,1870-1946)的生活,依然缺乏资料。同许多思想超前的开拓者一样,巴舍利耶的研究成果在当时未能引起学界重视,直至50多年后被保罗·萨缪尔森…

    2022年9月30日
    2
  • 关于this指针

    关于this指针一个类的对象中实际只包含了该对象的数据成员信息,当我们创建了多个类的对象时,使对象1调用该类的成员函数,为什么可以改变对象1中的信息,而不去设置其他对象的信息?成员函数在类中只有一份,所有该类的对象共同使用,编译器是如何识别并处理的呢?编译器识别一个类分为三步:1.识别类的类名2.识别类的成员变量3.识别类的成员函数并对成员函数进行修改修改方式:成员函数有一个隐藏…

    2022年5月16日
    52
  • lvm snapshot快照原理

    lvm snapshot快照原理

    2021年9月9日
    60

发表回复

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

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