矩陣中的路徑 機械人路徑 DFS

2021-10-03 15:57:07 字數 1547 閱讀 6738

q1:請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3×4的矩陣中包含一條字串「bfce」的路徑。

[["a","b","c","e"],

["s","f","c","s"],

["a","d","e","e"]]

分析:深度優先搜尋遍歷

遞迴引數:i,j:行列索引;k:目標字串的索引

遞迴終止條件:1、陣列越界。2、字元不匹配。3、當前元素已被訪問過-------false

若字元全部匹配,k==len(word)---------------true

class solution:

def exist(self, board: list[list[str]], word: str) -> bool:

#訪問標記陣列

visited = [[0]*len(board[0]) for x in range(len(board))]

def dfs(k,i,j):

#遞迴終止條件

if k==len(word):

return true

res = false

if 0<=iq2:地上有乙個m行n列的方格,從座標 [0,0] 到座標 [m-1,n-1] 。乙個機械人從座標 [0, 0] 的格仔開始移動,它每次可以向左、右、上、下移動一格(不能移動到方格外),也不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 [35, 37] ,因為3+5+3+7=18。但它不能進入方格 [35, 38],因為3+5+3+8=19。請問該機械人能夠到達多少個格仔?

示例 :

輸入:m = 2, n = 3, k = 1輸出:3

class solution:

def movingcount(self, m: int, n: int, k: int) -> int:

def judge(s,i,j):

if sum(map(int, str(i)+str(j))) <= s:

return true

else:

return false

def dfs(row,col,i,j,vsited,s):

count=0

if 0<=ivsited[i][j]=1

count = 1+dfs(row,col,i,j+1,vsited,s)+dfs(row,col,i,j-1,vsited,s)+dfs(row,col,i-1,j,vsited,s)+dfs(row,col,i+1,j,vsited,s)

return count

visited = [[0 for i in range(n)] for j in range(m)]

count = dfs(m,n,0,0,visited,k)

return count

回溯法 矩陣中的路徑,機械人的運動範圍

回溯法是做了剪枝改進的窮舉法,適合由多個步驟組成,並且每個步驟都有多個選項組成的問題。回溯法的解空間樹到達葉結點時,如果在葉子結點的狀態滿足題目的約束條件,那麼就找到了乙個可行的解決方案。回溯二字在於,如果在解空間樹上的某個結點不滿足約束條件,那麼就退回到上一結點,再嘗試其它選項 如果全部試過都不行...

矩陣中的路徑 機械人的運動範圍題目分析

矩陣中的路徑 和 機械人的運動範圍 是劍指offer的倒數第2,3道題目,因為這兩道題思路類似,就放在一起說。請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路...

23 矩陣中的路徑 DFS

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則之後不能再次進入這個格仔。注意 輸入的路徑不為空 所有出現的字元均為大寫英文本母 樣例matri...