2018/9/2
POJ 1088
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <map>
#include <algorithm>
#include <vector>
#define pi 3.141592654
using namespace std;
int r, c;
int road[101][101], len[101][101] = {0};
int xr[] = {0, 1, 0, -1};
int yr[] = {-1, 0, 1, 0};
int dfs(int x, int y)
{
if(len[x][y])
return len[x][y];
int sum = 1;
for(int i = 0; i < 4; i++){
//从四个方向走出一步,顺序是上右下左
int xx = x + xr[i];
int yy = y + yr[i];
if(xx > 0 && xx <= r && yy > 0 && yy <= c)
if(road[xx][yy] > road[x][y])
sum = max(sum, dfs(xx, yy) + 1);
}
len[x][y] = sum;
return sum;
}
int main()
{
while(scanf("%d%d", &r, &c) != EOF){
//从1开始是为了走到边界时防止数组越界
for(int i = 1; i <= r; i++)
for(int j = 1; j <= c; j++)
scanf("%d", &road[i][j]);
int ans = 0;
for(int i = 1; i <= r; i++)
for(int j = 1; j<= c; j++)
ans = max(ans, dfs(i, j));
printf("%d\n", ans);
}
return 0;
}