劍指offer 矩陣中的路徑

2021-10-23 05:08:13 字數 1377 閱讀 5545

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

例如

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...