现在的位置: 首页 > 综合 > 正文

POJ 1008 深度优先、记忆搜索

2014年07月07日 ⁄ 综合 ⁄ 共 1071字 ⁄ 字号 评论关闭

http://blog.sina.com.cn/s/blog_7025794a01014pps.html

#include <iostream> 
#include <string> 
 
using namespace std; 
 
const int MAXN = 100; 
 
int r, c; 
int h[MAXN+1][MAXN+1]; 
int f[MAXN+1][MAXN+1]; 
 
bool Valid(int x, int y) 
{ 
    return x >= 1 && x <= r && y >= 1 && y <= c; 
} 
 
int F(int i, int j) 
{ 
    if (f[i][j] != 0) 
    {       
	return f[i][j]; 
    } 
    int d; 
    const int dir[][2] = {{0, ‐1}, {‐1, 0}, {0, 1}, {1, 0}}; 
    for (d = 0; d < 4; d ++) 
    { 
        int x = i + dir[d][0], y = j + dir[d][1]; 
        if (Valid(x, y) && h[x][y] < h[i][j] && F(x, y) > f[i][j]) 
        { 
            f[i][j] = F(x, y); 
        } 
    } 
    return ++f[i][j]; 
} 
 
int main() 
{ 
    int i, j; 
    cin >> r >> c; 
    for (i = 1; i <= r; i ++) 
    { 
        for (j = 1; j <= c; j ++) 
        { 
            cin >> h[i][j]; 
        } 
    } 
    int ans = 0; 
    for (i = 1; i <= r; i ++) 
    { 
        for (j = 1; j <= c; j ++) 
        { 
            if (F(i, j) > ans) 
            { 
                ans = F(i, j); 
            } 
        } 
    } 
    cout << ans << endl; 
    return 0; 
} 
 

抱歉!评论已关闭.