题目内容
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
题目思路
这道题可以考虑使用向四周搜索的办法。值得注意的是,因为是字符串变量所以不可修改,我们要建立一个用来反映本元素是否被遍历过的对照矩阵即可。
程序代码
# -*- coding:utf-8 -*-
class Solution:
def hasPath(self,matrix, rows, cols, path):
# write code here
if not matrix or not path:
return False
m2=[[0 for i in range(rows)]for j in range(cols)]
for i in range(rows):
for j in range(cols):
if self.find(matrix,i,j,path,rows,cols,m2):
return True
return False
def find(self,matrix,i,j,path,rows,cols,m2):
if not path:
return True
print(i,j,path)
if path[0]!=matrix[i][j]:
return False
else:#说明这两个匹配
m2[i][j]=1
if i<rows-1 and m2[i+1][j]==0:#向下
self.find(matrix,i+1,j,path[1:],rows,cols,m2)
if i>0 and m2[i-1][j]==0:#向上
self.find(matrix,i-1,j,path[1:],rows,cols,m2)
if j<cols-1 and m2[i][j-1]==0:#向右
self.find(matrix,i,j+1,path[1:],rows,cols,m2)
if j>0 and m2[i][j-1]==0:#向左
self.find(matrix,i,j-1,path[1:],rows,cols,m2)
m2[i][j]=0