#include<bits/stdc++.h> using namespace std; int m,n; int a[105][105]; int vis[105][105]; int dir[4][2]={1,0,0,1,-1,0,0,-1}; int maxs; void find(int x,int y,int step){ vis[x][y]=1; if(x<1||x>n||y<1||y>m){ return; } if(a[x][y]>a[x+1][y]&&a[x][y]>a[x-1][y]&&a[x][y]>a[x][y-1]&&a[x][y]>a[x][y+1]){ if(step>maxs){ maxs=step; } return; } for(int i=0;i<4;i++){ int nx=x+dir[i][0]; int ny=y+dir[i][1]; if(vis[nx][ny]==0&&a[nx][ny]>a[x][y]){ vis[nx][ny]=1; find(nx,ny,step+1); vis[nx][ny]=0; } } } int main() { while(cin>>n>>m){ maxs=0; memset(a,0,sizeof(a)); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ memset(vis,0,sizeof(vis)); find(i,j,0); } } cout<<maxs<<endl; } return 0; } |
Double click to view unformatted code.