题解 | 景区散步
景区散步
https://www.nowcoder.com/practice/b784d768d4cd41258f7e4d90f1fb643c
#include <math.h>
#include <stdio.h>
int fDP(int a[102][102], int b[102][102], int c, int d, int o) {
int i = 0;
if ((a[c - 1][d] < a[c][d]) && (a[c - 1][d] != -1) && (b[c - 1][d] == 0)) {
b[c - 1][d] = 1;
i = fDP(a, b, c - 1, d, o + 1);
b[c - 1][d] = 0;
}
if ((a[c ][d + 1] < a[c][d]) && (a[c ][d + 1] != -1) && ( b[c ][d + 1] == 0)) {
b[c ][d + 1] = 1;
i = fmax(i, fDP(a, b, c , d+1, o + 1));
b[c ][d + 1] = 0;
}
if ((a[c + 1][d] < a[c][d]) && (a[c + 1][d] != -1) && ( b[c + 1][d] == 0)) {
b[c + 1][d] = 1;
i = fmax(i, fDP(a, b, c +1, d, o + 1));
b[c + 1][d] = 0;
}
if ((a[c ][d - 1] < a[c][d]) && (a[c ][d - 1] != -1) && (b[c ][d - 1] == 0)) {
b[c ][d - 1] = 1;
i = fmax(i, fmax(o, fDP(a, b, c , d-1, o + 1)));
b[c ][d - 1] = 0;
}
return fmax(i, o);
}
int main() {
int iW = 0, iL = 0;
int iO = 0;
int imFI[102][102] = {0};
int imUS[102][102] = {0};
memset(imFI, -1, sizeof(imFI));
scanf("%d %d", &iW, &iL);
for (int i = 0; i < iW; i++) {
for (int j = 0; j < iL; j++) {
scanf("%d", &imFI[i + 1][j + 1]);
}
}
for (int i = 0; i < iW; i++) {
for (int j = 0; j < iL; j++) {
iO = fmax(iO, fDP(imFI, imUS, i + 1, j + 1, 1));
}
}
printf("%d", iO);
return 0;
}
