题目描述: http://poj.org/problem?id=1088
1 #include<stdio.h> 2 3 int R,C; 4 int max; 5 int map[102][102];//记录每个区域的高度 6 int dis[102][102];//记录每个区域的高度能够滑行的最远距离 7 int book[102][102];//标记搜索过的点 8 9 int move[4][2]={0,1,1,0,-1,0,0,-1}; 10 11 int DFS(int x,int y)//返回(x,y)能滑行的最远距离 12 { 13 14 int i; 15 int tx,ty; 16 17 int temp,max_temp=1; 18 19 if(dis[x][y]) return dis[x][y]; 20 21 for(i=0;i<4;i++) 22 { 23 24 tx=x+move[i][0]; 25 ty=y+move[i][1]; 26 27 if(tx>R||ty>C||tx<1||ty<1||book[tx][ty]||map[tx][ty]>=map[x][y]) 28 continue; 29 30 temp=1; 31 book[tx][ty]=1; 32 33 temp+=DFS(tx,ty); 34 35 if(temp>max_temp) max_temp=temp; 36 37 book[tx][ty]=0; 38 39 } 40 41 dis[x][y]=max_temp; 42 43 return max_temp; 44 45 } 46 47 int main(int argc,char* argv) 48 { 49 50 int i,j; 51 int temp; 52 53 while(scanf("%d%d",&R,&C)!=EOF) 54 { 55 56 max=1; 57 58 for(i=1;i<=R;i++) 59 { 60 61 for(j=1;j<=C;j++) 62 { 63 64 scanf("%d",&map[i][j]); 65 66 } 67 68 } 69 70 for(i=1;i<=R;i++) 71 { 72 73 for(j=1;j<=C;j++) 74 { 75 76 book[i][j]=1; 77 78 temp=DFS(i,j); 79 80 book[i][j]=0; 81 82 if(temp>max) max=temp; 83 84 } 85 86 } 87 88 printf("%d\n",max); 89 90 } 91 92 return 0; 93 94 }
时间: 2024-09-15 19:39:20