題目描述:
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。 矩陣中包含一條字串"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...