請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。 例如
矩陣中包含一條字串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。
基礎思想是島問題中的傳染解法。(很形象,一傳四,中的人繼續傳)
用乙個陣列作為標誌陣列,記錄路徑是否走過此處,1為走過
從[0][0]位置開始遍歷
題目中給的是一維陣列,先做轉化,確定二維轉成一維陣列此時的位置
遞迴終止即返回false的條件:下標越界;此位置已經走過;當前位置的值和字串要求不符
遞迴成功即返回true的條件:字串的索引到達最後一位
此時,四個格仔都不符合要求,將此處的標誌置0,換個路線走
public
static
boolean
haspath
(char
matrix,
int rows,
int cols,
char
str)
int[
] dpmatrix =
newint
[rows]
[cols]
;for
(int i =
0; i < rows; i++)}
}return
false;}
public
static
boolean
process
(char
matrix,
int rows,
int cols,
int row,
int col,
char
str,
int index,
int[
] dp)
if(index == str.length -1)
//沒走過
//開始將走過的位置置1
dp[row]
[col]=1
;if(process
(matrix, rows, cols, row +
1, col, str, index +
1, dp)
||process
(matrix, rows, cols, row -
1, col, str, index +
1, dp)
||process
(matrix, rows, cols, row, col +
1, str, index +
1, dp)
||process
(matrix, rows, cols, row, col -
1, str, index +
1, dp)
)//走不通,還原
dp[row]
[col]=0
;return
false
;}
65 矩陣中的路徑
題目描述 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則之後不能再次進入這個格仔。例如 a b c e s f c s a d e e 這樣的...
65 劍指offer 矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 經典的回溯法的問題。用乙個狀態陣列儲存之前訪問過的字元,然後再分別...
劍指offer 65 矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 思路 回溯法 matrix矩陣中所有點作為起點,然後依據這個點進行...