View Code of Problem 17

#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.


Back to problem 17