請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。 例如
[ ab
cesf
csad
ee
]\begin a & b & c &e \\ s & f & c & s \\ a & d & e& e\\ \end\quad
⎣⎡asa
bfd
cce
ese
⎦⎤
矩陣中包含一條字串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。
給出的的示例為:
「abcesfcsadee」,3,4,「abcced」返回值為:
true這個問題其實考察的深度優先演算法,主要是查詢是否存在一條路徑。這個問題中並沒有指定路徑的起始點,所以在矩陣的任何乙個位置都可以是該路徑的起始點。該問題使用遞迴方法較為合適。
新建全域性變數儲存矩陣、矩陣的大小、設定乙個運動方向的dir陣列(發現這個特別的好用)
首先判斷當前位置是否越界,如果越界直接返回false;檢查是否該路徑是否已經被走過,走過的路徑設定為「#」, 如果走過返回false;檢查路徑是否已經走完,如果走完返回true。
先將本位置的字元儲存在在ch中,將全域性本位置設定「#」, 然後遞迴檢查四周是否可以繼續走。如果在四周找到相同的路徑,則返回true,結束遞迴。
如果在該位置的四周沒有找到正確的路徑,則將全域性矩陣中該位置的符號還原儲存在ch中的值,然後返回false。
public
class
solution
;char
route;
public
boolean
haspath
(char
matrix,
int rows,
int cols,
char
str)}}
return
false;}
// 判斷路徑的走向
public
boolean
canrun
(int i,
int j,
int m)
}// 如果沒有合適的路徑
mat[i*x + j]
= ch;
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...