Я пытаюсь решить эту проблему:
Учитывая матрицу n * m, с буквами (символами), найдите самый длинный последовательный путь букв в матрице и выведите строку.Например:
m = [[a,c,d],[i,b,e],[h,g,f]]
result = e,f,g,h
Вы можете перемещаться только вверх, вниз, влево, вправо внутри матрицы.Это то, что я дошел до того, чтобы узнать некоторую информацию в Интернете, но я не до конца.Я также хотел бы сделать решение эффективным, мой текущий код может иметь слишком много циклов и, вероятно, медленный для большой матрицы.Любая помощь будет принята с благодарностью!
R = len(matrix)
C = len(matrix[0])
x = [0, 1, 0, -1]
y = [1, 0, -1, 0]
dp=[[0 for i in range(C)]for i in range(R)]
def isvalid( i, j):
if (i < 0 or j < 0 or i >= R or j >= C):
return False
return True
def getLenUtil(matrix, i, j, prev):
if (isvalid(i, j)==False or isadjacent(prev, mat[i][j])==False):
return 0
if (dp[i][j] != -1):
return dp[i][j]
ans = 0
for k in range(4):
ans = max(ans, 1 + getLenUtil(mat, i + x[k],j + y[k], mat[i][j]))
dp[i][j] = ans
return dp[i][j]
def isadjacent(prev, curr):
if (ord(curr) -ord(prev)) == 1:
return True
return False
def findLongestSequence(matrix):
for i in range(R):
for j in range(C):
dp[i][j]=-1
ans = 0
for i in range(R):
for j in range(C):
if (mat[i][j] == s):
for k in range(4):
ans = max(ans, 1 + getLenUtil(matrix, i + x[k], j + y[k], s));
return ans