NIT 1552

E:生化实验


Time limit:  1000MS     Memory limit:  32768K 
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;  

}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值