POJ 1088 DFS
链接:
http://poj.org/problem?id=1088
题意:
给你一个矩阵,每个位置表示一个高度,你能从高度高的地方滑到高度低的地方,问你最多能滑多长
题解:
“深夜”水一题,很久之前好像扫过一眼这道题,但是不会写,其实就是一个dfs而已
代码:
31 int n, m; 32 int a[110][110]; 33 int dp[110][110]; 34 int dx[] = { 1,-1,0,0 }; 35 int dy[] = { 0,0,1,-1 }; 36 37 int dfs(int x, int y) { 38 if (dp[x][y]) return dp[x][y]; 39 rep(i, 0, 4) { 40 int nx = x + dx[i]; 41 int ny = y + dy[i]; 42 if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && a[x][y] > a[nx][ny]) 43 dp[x][y] = max(dp[x][y], dfs(nx, ny) + 1); 44 } 45 return dp[x][y]; 46 } 47 48 int main() { 49 cin >> n >> m; 50 memset(a, 0x3f, sizeof(a)); 51 rep(i, 1, n + 1) rep(j, 1, m + 1) cin >> a[i][j]; 52 rep(i, 1, n + 1) rep(j, 1, m + 1) dfs(i, j); 53 int ans = 0; 54 rep(i, 1, n + 1) rep(j, 1, m + 1) ans = max(ans, dp[i][j]); 55 cout << ans + 1 << endl; 56 return 0; 57 }