class
solution
:def
haspath
(self, matrix, rows, cols, path)
:# write code here
ifnot matrix or
not path:
return
false
matrix =
list
(matrix)
#轉換成list方便記錄走過的位置
hasornot =
false
for r in
range
(rows)
:for c in
range
(cols)
:if self.haspath(matrix[:]
, rows, cols, r, c, path,0)
:return
true
return
false
defhaspath
(self, matrix, rows, cols, r, c, path, i)
:# 返回什麼:返回matrix從(r,c)位置開始,path從i位置開始,兩者是否匹配
if i==
len(path)
:return
true
ifnot
0<=rnot0
<=c=='#'
:# 越界或者已經訪問過了
return
false
if matrix[r*cols + c]
!= path[i]
:# 不匹配
return
false
else
:# 匹配
matrix[r*cols + c]
='#'
# 將當前位置置為visited
return self.haspath(matrix, rows, cols, r, c+
1, path, i+1)
or \
self.haspath(matrix, rows, cols, r, c-
1, path, i+1)
or \
self.haspath(matrix, rows, cols, r+
1, c, path, i+1)
or \
self.haspath(matrix, rows, cols, r-
1, c, path, i+
1)
class
solution
:def
haspath
(self, matrix, rows, cols, path):if
not path:
return
false
# 給定的matrix是個字串,將該字串轉變成真正的matrix
matrix =
list
(matrix)
path =
list
(path)
for i in
range
(rows)
:for j in
range
(cols)
:if self.bfs_search(matrix[:]
, i, j, rows, cols, path[:]
):return
true
return
false
defbfs_search
(self, matrix, i, j, rows, cols, path)
: queue =
((i,j)
, matrix, path)
)while queue:
cur_pos, cur_matrix, cur_path = queue.pop(0)
ifnot cur_path:
return
true
r = cur_pos[0]
c = cur_pos[1]
if0<=r0<=c!='#'
and matrix[r*cols + c]
== cur_path[0]
: cur_matrix[r*cols + c]
='#'
cur_path.pop(0)
((r+
1,c)
, cur_matrix[:]
, cur_path[:]
))((r-
1,c)
, cur_matrix[:]
, cur_path[:]
))((r,c+1)
, cur_matrix[:]
, cur_path[:]
))((r,c-1)
, cur_matrix[:]
, cur_path[:]
))return
false
劍指offer 矩陣中的路徑(dfs,回溯)
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 回溯法,思路如下 0.根據給定陣列,初始化乙個標誌位陣列,初始化為...
劍指offer 矩陣中的路徑(C 回溯)
請設計乙個哈桑農戶,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個各自,則該路徑不能再進入該各自。例如 a b c e,s f c s,a d e e 矩陣中包含一條...
劍指Offer 矩陣中的路徑(dfs剪枝,回溯)
你不刷題,面試官就刷你。1 牛客和leetcode上面都有,方法傳入的引數不太一樣,但解法都一樣,自己沒想出來,做這類dfs的題目少,看了大佬們的解法,自己也能寫出來了。總結一下。寫的時候,我們要明確的知道,遞迴的終止條件,遞迴傳入的引數。這道題傳入的引數有矩陣 矩陣的行列座標n,m 題目要求的字串...