1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| typedef pair<int, int> PII; const int N = 210; vector<vector<int>> g; int st[N][N]; int n, m; int dx[4] = {0, 1, 0, -1}; int dy[4] = {1, 0, -1, 0}; int ans = 1; class Solution { public: void dfs(int sx, int sy) { cout << sx << " " << sy << endl; if (st[sx][sy]) return ; st[sx][sy] = 1; for (int i = 0; i < 4; i ++) { int nx = sx + dx[i], ny = sy + dy[i]; if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue; if (g[nx][ny] > g[sx][sy]) { if (st[nx][ny] == 0) { dfs(nx, ny); } st[sx][sy] = max(st[sx][sy], st[nx][ny] + 1); } } } int longestIncreasingPath(vector<vector<int>>& matrix) { g = matrix; n = matrix.size(), m = matrix[0].size(); ans = 1; memset(st, 0, sizeof st); for (int i = 0; i < matrix.size(); i ++) { for (int j = 0; j < matrix[0].size(); j ++) { dfs(i, j); ans = max(ans, st[i][j]); } } return ans; } };
|