劍指offer之矩陣中的路徑

2021-10-12 08:41:32 字數 1360 閱讀 4141

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

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