怀着侥幸的心理做完这道题,做完了有好多疑问,想和大家一起想一想~
原来老师给我们讲解思路的时候觉得这道题还行。。不过后来自己动手的时候就有点纠结了。。
上网搜了一下,自己做了一下,现在才有点小感悟~
也给大家画个图吧~
思路:先从第一个开始算起,计算出现1的个数,再把已经算过1的标记起来。
程序:
#include<stdio.h>
int a[120][120];
int point(int i,int j)
{
int s=0;
a[i][j]=0;
if(a[i-1][j])
s=s+point(i-1,j);
if(a[i][j-1])
s=s+point(i,j-1);
if(a[i+1][j])
s=s+point(i+1,j);
if(a[i][j+1])
s=s+point(i,j+1);
return s+1;
}
int main()
{
int i,j,n,m,t,max;
while(scanf("%d%d",&n,&m)!=EOF)
{
max=0;
if(n==0&&m==0)
break;
for(i=0;i<=n;i++)
a[i][0]=a[i][m+1]=0;
for(j=0;j<=m;j++)
a[0][j]=a[n+1][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j])
{
t=point(i,j);
if(t>max)
max = t;
}
printf("%d\n",max);
}
}下午就要正式上课啦~~睡觉去~
![]()
poj1082-最大黑区域
最新推荐文章于 2023-11-19 11:00:46 发布