package main import ( "bufio" "fmt" "os" "strconv" "strings" ) var arr [][]int var dp [][]int func solution(arr [][]int) int { dp = make([][]int, len(arr)) for i := 0; i < len(dp); i++ { tmp := make([]int, len(arr[0])) for j := 0; j < len(tmp); j++ { tmp[j] = 1 } dp[i] = tmp } //上下左右遍历 res := 0 totalRow, totalCol := len(arr), len(arr[0]) for i := 0; i < totalRow; i++ { for j := 0; j < totalCol; j++ { dfs(totalRow, totalCol, i, j) res = max(res, dp[i][j]) } } return res } func dfs(totalRow, totalCol, posRow, posCol int) { //上 if (posRow-1 >= 0) && (arr[posRow-1][posCol] < arr[posRow][posCol]) { dfs(totalRow, totalCol, posRow-1, posCol) dp[posRow][posCol] = max(dp[posRow][posCol], dp[posRow-1][posCol]+1) } //下 if (posRow+1 < totalRow) && (arr[posRow+1][posCol] < arr[posRow][posCol]) { dfs(totalRow, totalCol, posRow+1, posCol) dp[posRow][posCol] = max(dp[posRow][posCol], dp[posRow+1][posCol]+1) } //左 if (posCol-1 >= 0) && (arr[posRow][posCol-1] < arr[posRow][posCol]) { dfs(totalRow, totalCol, posRow, posCol-1) dp[posRow][posCol] = max(dp[posRow][posCol], dp[posRow][posCol-1]+1) } //右 if (posCol+1 < totalCol) && (arr[posRow][posCol+1] < arr[posRow][posCol]) { dfs(totalRow, totalCol, posRow, posCol+1) dp[posRow][posCol] = max(dp[posRow][posCol], dp[posRow][posCol+1]+1) } } func max(a, b int) int { if a > b { return a } return b } /* * 5 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 结果 25 */ func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Scan() str := scanner.Text() strs := strings.Split(str, " ") row, _ := strconv.Atoi(strs[0]) arr = make([][]int, row) for i := 0; i < row; i++ { scanner.Scan() str = scanner.Text() strs = strings.Split(str, " ") tmp := make([]int, 0) for _, val := range strs { ele, _ := strconv.Atoi(val) tmp = append(tmp, ele) } arr[i] = tmp } fmt.Println(solution(arr)) }