題目描述
這裡有乙個長度為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...