原题链接:https://leetcode.cn/problems/maximum-number-of-moves-in-a-grid/
dfs
func maxMoves(grid [][]int) int {
m, n := len(grid), len(grid[0])
res := 0
visited := make([][]int, m)
for i := 0; i < m; i ++ {
visited[i] =make([]int, n)
for j := 0; j < n; j ++ {
visited[i][j] = -1
}
}
for i := 0; i < m; i++ {
res = max(res, dfs(grid, i, 0, visited))
}
return res
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func dfs(grid [][]int, r, c int, visited [][]int) int {
m, n := len(grid), len(grid[0])
var v1, v2, v3 int
if r-1 >= 0 && c + 1 < n && grid[r][c] < grid[r-1][c+1] {
if visited[r-1][c+1] == -1 {
visited[r-1][c+1] = dfs(grid, r-1, c + 1, visited)
}
v1 = visited[r-1][c+1] + 1
}
if c + 1 < n && grid[r][c] < grid[r][c+1]{
if visited[r][c+1] == -1 {
visited[r][c+1] =dfs(grid, r, c + 1,visited)
}
v2 = visited[r][c+1] + 1
}
if r + 1 < m && c + 1 < n && grid[r][c] < grid[r+1][c+1] {
if visited[r+1][c+1] == -1 {
visited[r+1][c+1] = dfs(grid, r+1, c + 1, visited)
}
v3 = visited[r+1][c+1] + 1
}
if v1 >= v2 && v1 >= v3 {
return v1
}
if v2 >= v1 && v2 >= v3 {
return v2
}
return v3
}