5552 到家的最少跳躍次數 BFS

2022-05-25 05:21:10 字數 1394 閱讀 7387

有乙隻跳蚤的家在數軸上的位置 x 處。請你幫助它從位置 0 出發,到達它的家。

跳蚤跳躍的規則如下:

它可以 往前 跳恰好 a 個位置(即往右跳)。

它可以 往後 跳恰好 b 個位置(即往左跳)。

它不能 連續 往後跳 2 次。

它不能跳到任何 forbidden 陣列中的位置。

跳蚤可以往前跳 超過 它的家的位置,但是它 不能跳到負整數 的位置。

給你乙個整數陣列 forbidden ,其中 forbidden[i] 是跳蚤不能跳到的位置,同時給你整數 a, b 和 x ,請你返回跳蚤到家的最少跳躍次數。如果沒有恰好到達 x 的可行方案,請你返回 -1 。

示例 1:

輸入:forbidden = [14,4,18,1,15], a = 3, b = 15, x = 9

輸出:3

解釋:往前跳 3 次(0 -> 3 -> 6 -> 9),跳蚤就到家了。

示例 2:

輸入:forbidden = [8,3,16,6,12,20], a = 15, b = 13, x = 11

輸出:-1

示例 3:

輸入:forbidden = [1,6,2,14,5,17,4], a = 16, b = 9, x = 7

輸出:2

解釋:往前跳一次(0 -> 16),然後往回跳一次(16 -> 7),跳蚤就到家了。

1 <= forbidden.length <= 1000

1 <= a, b, forbidden[i] <= 2000

0 <= x <= 2000

forbidden 中所有位置互不相同。

位置 x 不在 forbidden 中。

注意,這裡向後跳到達的點不需要標記為訪問過。因為乙個點可以向前跳到,也可以反向跳到。

class solution 

};bool vis[4005];

int minimumjumps(vector& forbidden, int a, int b, int x)

for (auto x : forbidden)

int ans = 0;

queue q;

q.push(node(0,false));

vis[0] = true;

while (!q.empty())

else

if (tmp < 4000 && !vis[tmp])

tmp = now.idx - b;

if (tmp == x)

else

if (tmp >= 0 && !vis[tmp] && !now.flag) }}

return -1;

}};

1654 到家的最少跳躍次數

題目描述 有乙隻跳蚤的家在數軸上的位置 x 處。請你幫助它從位置 0 出發,到達它的家。跳蚤跳躍的規則如下 它可以 往前 跳恰好 a 個位置 即往右跳 它可以 往後 跳恰好 b 個位置 即往左跳 它不能 連續 往後跳 2 次。它不能跳到任何 forbidden 陣列中的位置。跳蚤可以往前跳 超過 它...

跳躍遊戲II(最少的可達跳躍次數)

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...

Leetcode 1654 到家的最少跳躍次數

題意 有乙隻跳蚤的家在數軸上的位置x處。請你幫助它從位置0出發,到達它的家。跳蚤跳躍的規則如下 跳蚤可以往前跳超過它的家的位置,但是它不能跳到負整數的位置。給你乙個整數陣列forbidden,其中forbidden i 是跳蚤不能跳到的位置,同時給你整數a,b和x,請你返回跳蚤到家的最少跳躍次數。如...