#include<stdio.h> int map[100][100]; //全局变量 int walk(int i, int j) { int s[4] = {0}; int max = 0; if (map[i][j]>map[i][j + 1] && map[i][j]>map[i][j - 1] && map[i][j]>map[i - 1][j] && map[i][j]>map[i + 1][j]) return 0; //此时的楼梯数已经是最大的了,比上下左右的都大 else { if (map[i][j] < map[i][j - 1]) s[0] = walk(i, j - 1) + 1; if (map[i][j] < map[i][j + 1]) s[1] = walk(i, j + 1) + 1; if (map[i][j] < map[i - 1][j]) s[2] = walk(i - 1, j) + 1; if (map[i][j] < map[i + 1][j]) s[3] = walk(i + 1, j) + 1; for (int p = 0; p < 4; p++) { if (max < s[p]) { max = s[p]; } } return max; } } int main() { int n, m; while (scanf("%d%d", &n, &m) != EOF) { for (int i = 0; i <100; i++) { for (int j = 0; j <100; j++) { map[i][j] = 0; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { scanf("%d", &map[i][j]); } } int step = 0; for (int i = 1; i <= n; i++) { //因为有诸如map[i][j - 1],若j从0开始,那么就会j-1就是负数 for (int j = 1; j <= m; j++) { if (step < walk(i, j)) { step = walk(i, j); //不断寻找最大的step } } } printf("%d\n", step); } return 0; } |
Double click to view unformatted code.