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) {
 		map[100][100] = {0}; 
//		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;
}
/*
Main.c: In function 'main':
Main.c:28:20: error: expected expression before '{' token
    map[100][100] = {0};
                    ^
*/

Double click to view unformatted code.


Back to problem 17