E:生化实验
Total Submit: 82 Accepted: 45
Description
最近,phd虎在做一项实验,他培养了一种细菌,这种细菌繁殖方式非常奇怪,一个培养皿,开始放一个细菌,第二天它会它周围的营养素都吃掉,然后分裂成这么n多小细菌把周围的空隙占满,第二天,第三天依次以这种方式扩散。但是呢,培养皿中有些污点,细菌是不能繁殖在污点上的。
比如
第一天 第二天 第三天
************* ************* *************
************* ************* ****.....****
************* *****...***** ****.....****
******.****** *****...***** ****.....****
*******@***** *****..@***** ****...@.****
************* ************* ****....*****
************* ************* *************
图中*表示培养皿上的营养素,.表示细菌,@表示污点
Input
包含多组数据,对每组数据,第一行包含两个整数N,M(3培养皿的长和宽。
接下来有N行,每行有M个字符,'*'表示营养素,'.'表示最初的细菌,保证仅有一个'.','@'表示污点,污点可能有多个。
Output
对每组数据,输出几天时间细菌能把培养皿上的营养素吃完。
Sample Input
7 13
*************
*************
*************
******.******
*******@*****
*************
*************
Sample Output
6
#include<stdio.h>
#include<string.h>
int x[8]={-1,-1,-1,0,0,1,1,1};
int y[8]={-1,0,1,-1,1,-1,0,1};
int n,m,sum;
char a[100][100];
int b[100][100];
int duan()
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i][j]=='*')
{
return 1;
}
}
}
return 0;
}
void search(int xx,int yy)
{
int i,aa,bb;
for(i=0;i<8;i++)
{
aa=xx+x[i];
bb=yy+y[i];
if(aa>=0&&bb>=0&&aa<n&&bb<m&&a[aa][bb]=='*')
{
a[aa][bb]='.';
b[aa][bb]=sum+1;//标记第sum+1天要搜索的点
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
getchar();
int i,j;
for(i=0;i<n;i++)
scanf("%s",a[i]);
memset(b,0,sizeof(b));
sum=0;
while(duan())
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(a[i][j]=='.'&&b[i][j]==sum)
search(i,j);
sum++;
}
printf("%d\n",sum);
}
return 0;
}