矩陣中的路徑(劍指offer 12)

2021-09-27 02:17:17 字數 1315 閱讀 8077

設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某個字串所有字元的路徑,路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左、右、上、下各移動一格,如果一條路徑經過了矩陣中的某一格,那麼該路徑不能再次進入該格仔。 例下 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 相同 題目描述 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格...