23 矩陣中的路徑 DFS

2021-10-05 12:02:38 字數 1573 閱讀 1770

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。

路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。

如果一條路徑經過了矩陣中的某乙個格仔,則之後不能再次進入這個格仔。

注意:輸入的路徑不為空;

所有出現的字元均為大寫英文本母;

樣例matrix=

[[「a」,「b」,「c」,「e」],

[「s」,「f」,「c」,「s」],

[「a」,「d」,「e」,「e」]

]str=「bcce」 , return 「true」

str=「asae」 , return 「false」

首先題目讀錯了意思,以為是隨便選擇,不能連續路徑,因此初始化的時候只選擇了[0][0]點,後重新審題後修改了多了兩層迴圈;

判斷越界的時候將if(i < 0 || j<0 || i>=row || j>=col || visited[i][j] || (matrix[i][j]!=str.charat(len)))放到了遍歷的外層,導致一直被visited;

第乙個點的判斷,開始的樣例的路徑頭不在第乙個||樣例集合只有乙個元素,因此預設了滿足條件,當樣例只有乙個元素的時候沒法滿足,所以把遍歷的元素加了乙個原點

static int di = ; static int dj = ;

class

solution

;static

int[

]dj =

;static

boolean

dfs(

char

matrix, string str,

int i,

int j,

int row,

int col,

boolean

visited,

int len)

for(

int k =

0; k <=

4; k++

) visited[i]

[j]=

true;if

(dfs

(matrix, str, i, j, row, col, visited, len+1)

) visited[i]

[j]=

false

; i -= di[k]

; j -= dj[k];}

return

false;}

public

boolean

haspath

(char

matrix, string str)

int row = matrix.length;

int col = matrix[0]

.length;

for(

int l =

0; l< row ; l++)}

}return

false;}

}

回溯法 23 矩陣中的路徑

演算法思想 嘗試迷宮的每個位置作為起點,進行深度優先搜尋,給每次搜尋計數為u,如果matrix x y str u 則u 1,匹配失敗returnfalse,如果u str。size 1表示匹配完成,return true。如果所有位置都嘗試未成功,則return false。class solut...

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

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

劍指offer 矩陣中的路徑(dfs,回溯)

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 回溯法,思路如下 0.根據給定陣列,初始化乙個標誌位陣列,初始化為...