64 矩陣中的路徑

2021-10-09 09:48:20 字數 2238 閱讀 3498

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則之後不能再次進入這個格仔。 例如,在下面的3 x 4 矩陣中包含一條字串"bfce"的路徑,但是矩陣中不包含"abfb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。

a b t g

c f c s

j d e h

回溯法。首先,遍歷矩陣中的格仔,直到找到乙個和字串第乙個字元相同的格仔,把這個格仔作為這個路徑進入矩陣的起點。除了在邊界的格仔之外,其他各自都有4個相鄰的格仔。如果矩陣中的某個格仔的字元不是ch,那麼這個格仔不可能處在路徑上的第i個位置。如果路徑上的第i個字元正好是ch,那麼往相鄰的格仔尋找路徑上的第i+1個字元。當在矩陣中定位了路徑中前n個字元的位置之後,在與第n個字元對應的格仔的周圍都沒有找到第n+1個字元,說明第n個字元不對,這個時候只要在路徑上回到第n-1個字元,重新定位第n個字元即可。

由於路徑不能重複進入矩陣的格仔,因此需要定義乙個和矩陣相同大小的布林值矩陣,作為當前已經找過的路徑是否經過某個格仔的標識。 當矩陣中座標為(row,col)的格仔和路徑字串中相應的字元一樣時,從4個相鄰的格仔(row,col-1),(row-1,col),(row,col+1)以及(row+1,col)中去定位路徑字串中下乙個字元如果4個相鄰的格仔都沒有匹配字串中下乙個的字元,表明當前路徑字串中字元在矩陣中的定位不正確,我們需要回到前乙個,然後重新定位。一直重複這個過程,直到路徑字串上所有字元都在矩陣中找到合適的位置。

class

solution

: def dfs

(self,matrix,flag,rows,cols,r,c,s)

:if s=='':

return

true

dx =[-

1,1,

0,0]

dy =[0

,0,-

1,1] # 利用兩個陣列,來實現對每個格仔周圍格仔的訪問

for k in

range(4

):x = dx[k]

+ r y = dy[k]

+ c if x >=

0 and x < rows and y >=

0 and y < cols and flag[x]

[y] and matrix[x*cols+y]

==s[0]

: flag[x]

[y]=false # 修改當前格仔的標識

if self.

dfs(matrix,flag[:]

,rows,cols, x, y,s[1:

]): # 遞迴

return

true

flag[x]

[y]=true

# 如果上乙個判斷條件返回的是false,那麼就說明這個格仔目前還不是路徑上的格仔,再把當前格仔的標識修改回來。

return

false

def haspath

(self, matrix, rows, cols, path)

:if path =='':

return

true

flag =[[

true

for c in

range

(cols)

]for r in

range

(rows)

] # 定義乙個表示矩陣

for r in

range

(rows)

:# 對這個矩陣中的元素進行遍歷,不斷找路徑進入矩陣的起點,直到以某個格仔為起點找到整個路徑為止。

for c in

range

(cols)

:if matrix[r*cols+c]

== path[0]

: flag[r]

[c]=

false

if self.

dfs(matrix,flag[:]

,rows,cols, r, c,path[1:

]):return

true

flag[r]

[c]=

true

return false

矩陣中的路徑

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 3 4 矩陣 a b c e s f c s a d e e 中包...

矩陣中的路徑

題目描述 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則之後不能再次進入這個格仔。注意 輸入的路徑不為空 所有出現的字元均為大寫英文本母 樣例...

矩陣中的路徑

思路 矩陣如下 abce sfcs adee 找到一條路徑,從矩陣任意頂點出發,設計乙個矩陣,記錄走過的路線為true,下次不能走。每次走的時候匹配路徑元素。若上下左右每個方向都試一遍。每個方向都沒有結果,返回上一級,重置頂點為false。採用遞迴。def haspath self,matrix,r...