本問題是典型的矩陣搜尋問題,可使用深度優先搜尋(dfs)+ 剪枝解決請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3×4的矩陣中包含一條字串「bfce」的路徑(路徑中的字母用加粗標出)。
[["a","b","c","e"],
["s","f","c","s"],
["a","d","e","e"]]
但矩陣中不包含字串「abfb」的路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入這個格仔。
1. 演算法介紹:
對於該題目而言,dfs演算法就是走遍矩陣,走通了就說明找到該路徑,走遍了所有路線還是找不到了就說明找不到。(此處只講我對該演算法的理解,完整定義理解請看
關鍵點:
1)定義走通的條件:目的字串遍歷完成。
2)定義走不通的條件:座標超出範圍或字元和該座標相應字元不符合或矩陣該位置字元已經找過了。
ps:矩陣該位置字元已經找過了,所以不用再重複找了,不然的話會出現某些矩陣字元被重複使用。這是和題目要求相悖的。
2. 遞迴函式相關設定
1)引數設定:矩陣的索引x,y;矩陣;目的字串;目的字串的下標
2)return true情況:目的字串的下標 == (目的字串長度-1)
3)return false情況:座標超出範圍或字元和該座標相應字元不符合或矩陣該位置字元已經找過了。
4)輔助操作:當走過矩陣某個位置字元時,就記為'\' ,用完就記得恢復,使下次找另外字串時原始矩陣沒有'\'
5)找目的字串下乙個字元,則從上下左右四個方向走矩陣,用或運算連線結果。
遞迴函式:
bool dfs(int x, int y, int nindex, string word, vector& board)
bool exist(string word, vector&board)
}return false;
}
23 矩陣中的路徑 DFS
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則之後不能再次進入這個格仔。注意 輸入的路徑不為空 所有出現的字元均為大寫英文本母 樣例matri...
矩陣中的路徑 機械人路徑 DFS
q1 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如,在下面的3 4的矩陣中包含一條字串 bfce 的路徑。a b c e s f...
演算法 矩陣中的路徑2
public class solution return false matrix一維陣列 rows矩陣的行 cols矩陣的列,該點所在當前位置的行和列rowindex colindex str要尋找的字串 k字串的那個位置,flag該點有沒有下過 public boolean judge char...