矩陣中的路徑 劍指offer 回溯和BFS

2021-10-04 09:35:12 字數 2527 閱讀 9609

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 題目要求的字串...