解法1:首先,遍歷這個矩陣,我們很容易就能找到與字串matrix中第乙個字元相同的矩陣元素p[0]。然後遍歷p[0]的上下左右四個字元,如果有和字串matrix中下乙個字元相同的,就把那個字元當作下乙個字元(下一次遍歷的起點),如果沒有,就需要回退到上乙個字元,然後重新遍歷。為了避免路徑重疊,需要乙個輔助矩陣來記錄路徑情況。下面**中,當矩陣座標為(row,col)的格仔和路徑字串中下標為pathlength的字元一樣時,從4個相鄰的格仔(row,col-1)、(row-1,col)、(row,col+1)以及(row+1,col)中去定位路徑字串中下標為pathlength+1的字元。如果4個相鄰的格仔都沒有匹配字串中下標為pathlength+1的字元,表明當前路徑字串中下標為pathlength的字元在矩陣中的定位不正確,我們需要回到前乙個字串(pathlength-1),然後重新定位。一直重複這個過程,直到路徑字串上所有字元都在矩陣中找到格式的位置。
class solution:
def haspath(self, matrix, rows, cols, path):
# write code here
if not matrix:
return false
if not path:
return true
x = [list(matrix[cols*i:cols*i+cols]) for i in range(rows)]
for i in range(rows):
for j in range(cols):
if self.exist_helper(x,i,j,path):
return true
return false
def exist_helper(self,matrix,i,j,p):
if matrix[i][j] == p[0]:
if not p[1:]:
return true
matrix[i][j] = '#'
if i > 0 and self.exist_helper(matrix,i-1,j,p[1:]):
return true
if i < len(matrix)-1 and self.exist_helper(matrix,i+1,j,p[1:]):
return true
if j > 0 and self.exist_helper(matrix,i,j-1,p[1:]):
return true
if j < len(matrix[0])-1 and self.exist_helper(matrix,i,j+1,p[1:]):
return true
matrix[i][j] = p[0]
return false
else:
return false
劍指Offer六十五 矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 矩陣中包含一條字串 bcced 的路徑,但是矩陣中不包含 abcb...
劍指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...