poj 1088滑雪------精简的dfs代码

 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 }

 

posted @ 2014-04-13 21:56  少年小白  阅读(218)  评论(0)    收藏  举报