| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | type pair struct {	_1 int	_2 int}func longestIncreasingPath(matrix [][]int) (max int) {	m := len(matrix)	if m == 0 {		return 0	}	n := len(matrix[0])	if n == 0 {		return 0	}	mem := make(map[pair]int)	for i := 0; i < m; i++ {		for j := 0; j < n; j++ {			max = maxInt(max, dfs(matrix, m, n, j-1, i, matrix[i][j], &mem))			max = maxInt(max, dfs(matrix, m, n, j+1, i, matrix[i][j], &mem))			max = maxInt(max, dfs(matrix, m, n, j, i-1, matrix[i][j], &mem))			max = maxInt(max, dfs(matrix, m, n, j, i+1, matrix[i][j], &mem))		}	}	max++	return}func dfs(matrix [][]int, m, n, x, y, val int, mem *map[pair]int) (max int) {	if x < 0 || y < 0 || m <= y || n <= x || matrix[y][x] <= val {		return 0	}	if l, ok := (*mem)[pair{x, y}]; ok {		return l	}	max = maxInt(max, dfs(matrix, m, n, x-1, y, matrix[y][x], mem))	max = maxInt(max, dfs(matrix, m, n, x+1, y, matrix[y][x], mem))	max = maxInt(max, dfs(matrix, m, n, x, y-1, matrix[y][x], mem))	max = maxInt(max, dfs(matrix, m, n, x, y+1, matrix[y][x], mem))	max++	(*mem)[pair{x, y}] = max	return}func maxInt(x, y int) int {	if x < y {		return y	}	return x}
 |