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 }

 

posted @ 2017-04-30 01:42  Flowersea  阅读(155)  评论(0编辑  收藏  举报