劍指Offer 矩陣中的路徑

2021-10-04 20:48:25 字數 1293 閱讀 9356

題目描述

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。 矩陣中包含一條字串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。

解題步驟:

此題可以採用回溯的思想來解題,當前格仔裡值與字串相同時,再遞迴向上下左右遍歷

(1)我們需要乙個flag陣列來記錄已經遍歷過的位置,初始化為0,遍歷過的為1.

(2)迴圈遍歷矩陣matrix,如果當前值與str字串的第乙個元素相等時,進入到遞迴查詢。

(3)在遞迴回溯查詢函式,函式輸入的引數包含了當前矩陣matrix,當前遍歷的位置i和j,矩陣的行數rows和列數cols,flag陣列,字串str和當前遍歷的字串位置k

(4)回溯函式的遞迴結束條件為,i和j不再矩陣範圍或者當前矩陣的元素與str的元素不相同或者當前元素已經被遍歷過了 ,這些條件都返回false。

(5)反之,如果字串遍歷到最後乙個元素,還是相同的話,就返回true。

(5)當前矩陣的元素與str的元素不相同並且當前元素沒有被遍歷過了,就遍歷該元素,flag設定為1,並且遞迴該元素上下左右的位置,上下左右有乙個為true就返回true;全為false就將該元素回退,flag設定為0,返回false

**

public

boolean

haspath

(char

matrix,

int rows,

int cols,

char

str)}}

return

false;}

public

boolean

juge

(char

matrix,

int i,

int j,

int rows,

int cols,

int[

] flag,

char

str,

int k)

else

flag[i]

[j]=0;

return

false

;}

劍指offer 矩陣中的路徑

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

劍指offer 矩陣中的路徑

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

劍指offer 矩陣中的路徑

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