#55619: c++ dfs解 供參


61247091s@gapps.ntnu.edu.tw (wei)


#include <bits/stdc++.h>
using namespace std;

int r, c;
int a[105][105];
int m[105][105];
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};

int dfs(int rw, int cl) {
    if (m[rw][cl] != -1) return m[rw][cl];

    int max_len = 1;
    for (int i = 0; i < 4; i++) {
        int nr=rw+dx[i];
        int nc=cl+dy[i];

        if (nr >= 0 && nr < r && nc >= 0 && nc < c) {
            if (a[nr][nc] < a[rw][cl]) {
                max_len = max(max_len, 1 + dfs(nr, nc));
            }
        }
    }

    return m[rw][cl] = max_len;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t;
    if (!(cin >> t)) return 0;

    while (t--) {
        string s;
        cin >> s >> r >> c;

        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                cin >> a[i][j];
            }
        }

        memset(m, -1, sizeof(m));

        int ans = -1;
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                ans = max(ans, dfs(i, j));
            }
        }

        cout << s << ": " << ans << "\n";
    }
    return 0;
}