COJ1196(Staginner 去爬山)

题目大意:给定一个n*m的只含0和1的矩阵,从矩阵的最后一行中的某个1出发,每步只能走到相邻的且是1的格子中,求能达到的最大高度(最小行数)。

这题直接DFS即可,复杂度为O(N*M)。

View Code
 1 #include <stdio.h>

 2 #define MAX(a,b)  ((a)>(b)?(a):(b))

 3 #define N 100

 4 int dx[4]={0,0,1,-1};

 5 int dy[4]={1,-1,0,0};

 6 char g[N][N];

 7 int n,m,ans;

 8 void dfs(int i,int j)

 9 {

10   int d,ni,nj;

11   ans=MAX(ans,n-i);

12   g[i][j]=0;

13   for(d=0;d<4;d++)

14   {

15     ni=i+dx[d],nj=j+dy[d];

16     if(ni<0 || nj<0 || ni>=n || nj>=m || !g[ni][nj])  continue;

17     dfs(ni,nj);

18   }

19 }

20 int main()

21 {

22   int i,j;

23   while(~scanf("%d%d",&n,&m))

24   {

25     for(i=0;i<n;i++)

26     {

27       for(j=0;j<m;j++)  scanf("%d",&g[i][j]);

28     }

29     ans=0;

30     for(j=0;j<m;j++)  if(g[n-1][j]) dfs(n-1,j);

31     printf("%d\n",ans);

32   }

33   return 0;

34 }

 

你可能感兴趣的:(inner)