-6

描述:

有一个长宽均为L的方形培养皿,里面有L*L的槽。有些插槽含有细菌,有些含有抗生素,有些是干净的。每个细菌都会单独繁殖,一天一个细菌会在所有四个社区繁殖,除了那些使用抗生素的社区。找出把整道菜填满需要多少天?

输入格式:

第 1 行:一个整数 第 2 行 - L+1 :每行 L 个整数,值 0、1、2,分别表示没有细菌、有细菌、有抗生素。

输出格式:

整数 m:细菌会在培养皿的每个槽中填满多少天(有抗生素的除外)

样本输入

3
2 0 0
0 1 0
0 0 0

样本输出

2

数据范围

1<=L<=100,给定的数据最终可以填满盘子。

我的代码在这里

#include<iostream>
using namespace std;

int L,i,j=0;
bool flag=false;
int m=0;
int cell[100][100]={3};

int main()
{
    cin>>L;
    for (i=1;i<=L;i++)
      for (j=1;j<=L;j++)
        cin>>cell[i][j];

    while (!flag){
        flag=true;
            for (i=1;i<=L;i++)
              for (j=1;j<=L;j++)
              {
                if (cell[i][j]==1){
                   if (cell[i-1][j]==0){
                       cell[i-1][j]=1;
                       flag=false;}
                   if (cell[i+1][j]==0){
                       cell[i+1][j]=1;
                       flag=false;}
                   if (cell[i][j-1]==0){
                       cell[i][j-1]=1;
                       flag=false;}
                   if (cell[i][j+1]==0){
                       cell[i][j+1]=1;
                       flag=false;}
                   }
                if (cell[i][j]==0) flag=false;  
             }
        m=m+1;
        }

    m=m-1;
    cout<<m;
    return 0;
}

但是在线法官说:

Judging... PROB=1003 LANG=C++

Wrong Answer (Time: 0ms, Memory: 4796kb)
Accepted (Time: 0ms, Memory: 4832kb)
Wrong Answer (Time: 0ms, Memory: 4852kb)
Wrong Answer (Time: 0ms, Memory: 4868kb)
Wrong Answer (Time: 0ms, Memory: 4944kb)
Wrong Answer (Time: 0ms, Memory: 5024kb)
Wrong Answer (Time: 0ms, Memory: 5100kb)
Wrong Answer (Time: 0ms, Memory: 5188kb)
Wrong Answer (Time: 0ms, Memory: 5180kb)
Wrong Answer (Time: 10ms, Memory: 5192kb)

我的实施有什么问题?提前非常感谢!

4

2 回答 2

3

您正在覆盖您面前的数组。例如,使用此输入:

2
1 0
0 0

您的程序将回答1而不是2. 原因是,在你处理了左上角之后,你的数组看起来像这样:

1 1
1 0

这是正确的,但在顶层的同一循环中,while 您还模拟了左下角,它扩展到右下角并立即完成模拟。

对此的一种解决方案是使用两个数组,从一个读取,写入另一个,并在每个周期结束时交换它们。

于 2013-06-06T11:29:25.330 回答
1

您正在修改正在读取的数组。对于每个步骤,您需要将新格式放入一个新数组中(实际上,只需要 2 个,因为您可以在它们之间来回复制)。

当 1,1 的细菌长成 1,2,然后检查并长成细胞 1,3 等等时,问题就出现了。

您还从 1,1 开始搜索(您可能希望从 0,0 开始,并将数组的大小扩展到 1002 x 1002。

您还需要检查您正在生长的细胞是否真的在培养皿内(目前,您的细菌可以在培养皿外(从内部)生长,从而给出不正确的结果)。

于 2013-06-06T11:32:23.707 回答