1 #include<iostream> 2 using namespace std; 3 int Edge[105][105]; 4 int E[105][105]; 5 int dir[4][2]={{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; 6 int Max, ma; 7 int r ,c; 8 bool ok( int a, int b ) 9 { 10 if( a<0||a>=r||b<0||b>=c )return false; 11 else return true; 12 } 13 void dfs( int a, int b, int cur ) 14 { 15 if( E[a][b]>0 )ma=max( ma, cur+E[a][b]-1 ); 16 else 17 { 18 int fla=0; 19 for( int i=0; i<4; i++ ) 20 { 21 int a1=a+dir[i][0]; 22 int b1=b+dir[i][1]; 23 if( ok(a1, b1)&&Edge[a1][b1]<Edge[a][b] ) 24 { 25 dfs( a1, b1, cur+1 ); 26 fla=1; 27 } 28 } 29 if( fla==0&&ma<cur )ma=cur; 30 } 31 } 32 int main() 33 { 34 35 int i, j; 36 cin >> r >> c; 37 for( i=0; i<r; i++ ) 38 for( j=0; j<c; j++ ) 39 { 40 cin >> Edge[i][j]; 41 E[i][j]=0; 42 } 43 for( i=0; i<r; i++ ) 44 { 45 for( j=0; j<c; j++ ) 46 { 47 ma=0; 48 dfs( i, j, 1 ); 49 E[i][j]=ma; 50 if(Max<ma) 51 Max=ma; 52 } 53 } 54 cout<<Max<<endl; 55 return 0; 56 }
poj 1088滑雪------精简的dfs代码,布布扣,bubuko.com
原文:http://www.cnblogs.com/so-easy/p/3662849.html