| 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
 
- }
 
 
  |