传说中很经典的一题。 关键就是记录下已经搜索过的点。可以节省很多的时间。 学习了。 好久没做题了。。。 #include <iostream> using namespace std; int map[105][105]; int step[105][105]; int dir[4][2] = {-1,0,1,0,0,-1,0,1}; int r,c; int DFS(int x,int y) { int max=0,ans,i; if(step[x][y]>0) return step[x][y]; for(i=0;i<=3;i++) { if( map[x][y] > map[x+dir[i][0]][y+dir[i][1]] ) { ans = DFS(x+dir[i][0],y+dir[i][1]) + 1 ; if( ans >max ) max = ans; } } return max; } int main() { int i,j,max,ans; while(scanf("%d%d",&r,&c)!=EOF) { memset(step,0,sizeof(step)); memset(map,10,sizeof(map)); for(i=1;i<=r;i++) { for(j=1;j<=c;j++) { scanf("%d",&map[i][j]); } } ans = 0; for(i=1;i<=r;++i) { for(j=1;j<=c;++j) { max = step[i][j] = DFS(i,j); if( max > ans ) ans = max; } } printf("%d/n",ans+1); } return 0; }