题解 | 景区散步

景区散步

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;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务