請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。
例如
a b t g
c f c s
j d e h
矩陣中包含一條字串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。
解題思路:
使用深度優先搜尋遍歷來實現
class
solution
if(str[k+1]
=='\0'
)//字串查詢結束
dp[index]
=true;if
(dfs
(matrix,rows,cols,str,i -
1,j,k +
1,dp)
||dfs
(matrix,rows,cols,str,i,j -
1,k +
1,dp)
||dfs
(matrix,rows,cols,str,i +
1,j,k +
1,dp)
||dfs
(matrix,rows,cols,str,i,j +
1,k +
1,dp)
) dp[index]
=false
;//恢復到原來的狀態
return
false;}
bool
haspath
(char
* matrix,
int rows,
int cols,
char
* str)
bool
* dp =
newbool
[rows * cols];/
* memset 是按照位元組對待初始化空間進行初始化的,
也就是說,函式裡面的第二個引數的那個初值(一般為0)是按照乙個乙個位元組往第乙個引數所指區域賦值的,
所以,在memset使用時要千萬小心,在給char以外的陣列賦值時,只能初始化為0或者-
1。 而如果初始化為其他的值,就會乙個位元組乙個位元組的進行賦值,從而出現奇怪的結果。
*/memset
(dp,
false
, rows * cols)
;for
(int i =
0;i < rows;i++)}
}delete
dp;
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...