設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某個字串所有字元的路徑,路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左、右、上、下各移動一格,如果一條路徑經過了矩陣中的某一格,那麼該路徑不能再次進入該格仔。 例下 3 x 4的矩陣中包含一條字串"bfce"的路徑,但是矩陣中不包含"abfb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。
回溯法:首先在矩陣任選乙個格仔作為路徑的起點。假設矩陣中某個格仔的字元為char, 並且這個格仔將對應於路徑上第i個字元。如果路徑上第i個字元不是char,那個這個格仔不可能處在路徑上的第i個位置。如果路徑上的第i個字元正好是char,那麼到相鄰的格仔尋找路徑上的第i + 1個字元。除矩陣邊界上的格仔之外,其它格仔都有4個相鄰的格仔。重複這個過程,知道路徑上的所有字元都在矩陣中找到相應的位置。由於路徑不能重重複進入矩陣的格仔,所以還需要定義和字元矩陣大小一樣的布林矩陣,用來標識路徑是否已經進入了每個格仔。**如下:
// 矩陣中以某個格仔為起點的路勁是否包含給定的字串
bool haspathcore(vector>& matrix,
int rows,
int cols,
int row,
int col,
string str,
int& pathlen,
bool* visited)
bool haspath = false;
if (row >= 0
&& row < rows
&& col >=0
&& col < cols
&& matrix[row][col] == str[pathlen]
&& !visited[row * cols + col])
}return haspath;
}// 矩陣中的路徑
bool pathinmatrix(vector>& matrix, int rows, int cols, string str)
}
}delete visited;
return false;
}
劍指offer12 矩陣中的路徑
設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某個字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。利用回溯法的思想,除矩陣邊界上的格仔外,其它格仔都有四個相鄰的格仔,當矩陣中座標為 ro...
劍指offer 12 矩陣中的路徑
判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向上下左右移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。public class solution,private int rows private int c...
劍指Offer12 矩陣中的路徑
劍指offer典型題整理 爭取做最好的題解 本題和 leetcode 79 相同 題目描述 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格...