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 }
原文地址:https://www.cnblogs.com/algorithms/p/2468793.html