問題 A 跳躍遊戲

2021-10-04 05:46:03 字數 1255 閱讀 2029

題目描述

這裡有乙個長度為n非負整數陣列 arr,你最開始位於該陣列的起始下標 m 處。當你位於下標 i 處時,你可以跳到 i + arr[i] 或者 i - arr[i]。

請你判斷自己是否能夠跳到對應元素值為 0 的下標處。

注意,不管是什麼情況下,你都無法跳到陣列之外。

輸入

測試樣例由多組測試資料組成。每組測試資料第一行輸入兩個正整數 n (1 <= n <= 50000 ), m ( 0 <= m < n )

第二行輸入n個正整數ni ( 0 <= ni <= 500 )

輸出

若你可以跳到對應元素值為0的下標出,輸出yes

否則輸出no

樣例輸入 copy

7 54 2 3 0 3 1 2

5 23 0 2 1 2

樣例輸出 copy

yesno

知識點:普通的bfs

解題思路:這一題不是圖上的搜尋,只有像數軸一樣左右搜,往左是i-arr[i],往右是i+arr[i]。然後就是判斷限制條件,和滿足條件。

總結:剪枝真的很重要!就是那個不符合條件就continue;

#include

#include

#include

using

namespace std;

struct node

;int mp[

50010];

int vis[

50010];

int n,m,sc,sr,newcolor;

int dir[4]

[2]=

,,,}

;//這些是之前的模板

int flag;

intbfs

(int x)

if(k + mp[k]

< n && vis[k + mp[k]]==

0)if(k - mp[k]

>

0&& vis[k - mp[k]]==

0)}}

intmain()

memset

(vis,0,

sizeof

(vis));

bfs(m);if

(!flag)cout<<

"no"

<}return0;

}

演算法 跳躍遊戲問題合集

題目 於leetcode 55 55.跳躍遊戲 給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置...

LintCode 跳躍遊戲 I VS跳躍遊戲 II

陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。分析 方法一 基於動態規劃的做法,時間複雜度o n 2 陣列dp i 表示能否到達下標為i的位置,對於從下標i 1開始的每乙個位置,都從下標j 0開始到i 1判斷能否到達j,並且判斷從j開始最遠能否跳到或超過i的...

LintCode Jump Game 跳躍遊戲

給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。樣例 a 2,3,1,1,4 返回 true.a 3,2,1,0,4 返回 false.注意 這個問題有兩個方法,乙個是貪心和 動態規劃。貪心方法時間複雜度為o...