由空地和牆組成的迷宮中有乙個球。球可以向上下左右四個方向滾動,但在遇到牆壁前不會停止滾動。當球停下時,可以選擇下乙個方向。
給定球的起始位置,目的地和迷宮,找出讓球停在目的地的最短距離。距離的定義是球從起始位置(不包括)到目的地(包括)經過的空地個數。如果球無法停在目的地,返回 -1。
迷宮由乙個0和1的二維陣列表示。 1表示牆壁,0表示空地。你可以假定迷宮的邊緣都是牆壁。起始位置和目的地的座標通過行號和列號給出。
示例 1:
輸入 1
: 迷宮由以下二維陣列表示00
1000
0000
0001
0110
1100
000輸入 2
: 起始位置座標 (rowstart, colstart)=(
0,4)
輸入 3
: 目的地座標 (rowdest, coldest)=(
4,4)
輸出:12
解析: 一條最短路徑 : left -
> down -
> left -
> down -
> right -
> down -
> right。
總距離為 1+1
+3+1
+2+2
+2=12。
示例 2:
輸入 1
: 迷宮由以下二維陣列表示00
1000
0000
0001
0110
1100
000輸入 2
: 起始位置座標 (rowstart, colstart)=(
0,4)
輸入 3
: 目的地座標 (rowdest, coldest)=(
3,2)
輸出:-
1解析: 沒有能夠使球停在目的地的路徑。
注意:
迷宮中只有乙個球和乙個目的地。
球和目的地都在空地上,且初始時它們不在同一位置。
給定的迷宮不包括邊界 (如圖中的紅色矩形), 但你可以假設迷宮的邊緣都是牆壁。
迷宮至少包括2塊空地,行數和列數均不超過100。
dfs 會超時,所以使用 bfs,注意小球會一直滾到底
class
solution,,
,};int
shortestdistance
(vectorint>>
& maze, vector<
int>
& start, vector<
int>
& destination)
x -= dircs[k][0
];y -
= dircs[k][1
];count--;if
(dp[x]
[y]> count));
}}}return dp[destination[0]
][destination[1]
]==0x7fffffff?-
1: dp[destination[0]
][destination[1]
];}}
;
leetcode菜狗入門 66 加一
給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1 2,3 輸出 1 2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4 3,2 1 輸出 4 3,...
leetcode菜狗入門 55 跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2 3,1 1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1 然後再從位置 1 跳 3 步到達最後 乙個位置。示例 2 輸...
leetcode菜狗入門 125 驗證回文串
給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。示例 1 輸入 a man,a plan,a canal panama 輸出 true示例 2 輸入 race a car 輸出 falseleft 從前往後搜尋,right ...