請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。 例如[ab
cesf
csad
ee
]\left[\begin a & b & c &e \\ s & f & c &s\\ a & d & e & e \end\right]
⎣⎡asa
bfd
cce
ese
⎦⎤
矩陣中包含一條字串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。
判斷從矩陣中的某乙個格仔出發是否可以遍歷字串中的字元。回溯思想解決此問題:若乙個格仔內的字元和字串中的乙個字元相同,則根據從其上下左右四個格仔出發是否能遍歷字串其餘字元判斷當前格仔出發能否遍歷字串中的字元。
實現步驟:
1、從矩陣中選取乙個作為出發點,判斷出發點是否可以遍歷字串
2、判斷從當前格仔出發能否遍歷字串:
public
class
solution
//此時當前位置的字元和字串中要遍歷的字元相同,如果當前查詢的字元是字串中的最後乙個字元,則表示可以遍歷,返回true
if(k==str.length-1)
visited[loc]
=true;if
(judge
(matrix, rows,cols,str,i-
1,j,k+
1,visited)
||judge
(matrix, rows,cols,str,i+
1,j,k+
1,visited)
||judge
(matrix, rows,cols,str,i,j-
1,k+
1,visited)
||judge
(matrix, rows,cols,str,i,j+
1,k+
1,visited)
)//從上下左右四個格仔出發均不能遍歷剩餘字元則返回false,當前格仔恢復未訪問狀態
visited[loc]
=false
;return
false;}
public
boolean
haspath
(char
matrix,
int rows,
int cols,
char
str)
boolean
visited =
newboolean
[matrix.length]
;//標誌每乙個格仔是否訪問過
for(
int i=
0; i)for
(int i=
0; i}return
false;}
}
程式設計練習題
程式student create student studs,int n student 是乙個結構型別,包含姓名 成績和指標域。studs 陣列中儲存了n個 student 記錄。create 函式的功能是編寫根據 studs 陣列建立乙個鍊錶,鍊錶中結點按成績降序排列,函式返回煉表頭指標。inc...
併發程式設計 練習題
1 簡述計算機作業系統中的 中斷 的作用?中斷機制包括硬體的中斷機制和作業系統的中斷處理服務程式。中斷機制由一些特定的暫存器和控制線路組成。處理器和外圍裝置等識別到的事件儲存在特定的暫存器中,處理器每執行完一條指令均由中斷機制判斷是否有事件發生。若無事件發生,cpu繼續執行,若有事件發生,則中斷機制...
C 程式設計練習題
using system namespace 字串排序 public static void printarray params string a for int i 0 i a.length i console.write a i 2.用遞迴函式實現二分查詢 using system namesp...