劍指 Offer JZ65 矩陣中的路徑

2021-10-09 03:28:40 字數 1306 閱讀 7911

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。 例如[ab

cesf

csad

ee

]\begin a & b & c &e \\ s & f & c & s \\ a & d & e& e\\ \end

⎣⎡​asa

​bfd

​cce

​ese

​⎦⎤​

矩陣中包含一條字串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。

回溯法

class

solution

private

:bool

haspathhelper

(char

* matrix,

int rows,

int cols,

char

* str,

bool

* pass,

int i,

int j)

if(j ==-1

)if(i <

0|| i >= rows)

return

false;if

(pass[i * cols + j]

||*str != matrix[i *cols + j]

)return

false

;

pass[i * cols + j]

=true

;bool sign =

haspathhelper

(matrix, rows, cols, str +

1, pass, i -

1, j)

||haspathhelper

(matrix, rows, cols, str +

1, pass, i +

1, j)

||haspathhelper

(matrix, rows, cols, str +

1, pass, i, j -1)

||haspathhelper

(matrix, rows, cols, str +

1, pass, i, j +1)

; pass[i * cols + j]

=false

;return sign;}}

;

65 劍指offer 矩陣中的路徑

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 經典的回溯法的問題。用乙個狀態陣列儲存之前訪問過的字元,然後再分別...

劍指offer 65 矩陣中的路徑

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 思路 回溯法 matrix矩陣中所有點作為起點,然後依據這個點進行...

劍指offer 65 矩陣中的路徑

利用回溯法 回溯演算法概念 在許多遞迴問題當中,我們採取的方法都是窮盡所有的可能,從而找出合法的解。但是在某些情況下,當遞迴到某一層的時候,根據設定的判斷條件,可以 judge 此解是不合法的。在這種情況下,我們就沒必要再進行深層次的遞迴,從而可以提高演算法效率。這一類演算法我們稱為 回溯法 設定的...