“Germs” - 一个C ++任务,我做错了什么?

时间:2013-06-06 11:18:50

标签: c++

说明

有一个方形培养皿,其长度和宽度分别为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)

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

2 个答案:

答案 0 :(得分:3)

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

2
1 0
0 0

您的计划将回复1而不是2。 原因是,在处理左上角之后,您的数组看起来像这样:

1 1
1 0

哪个是正确的,但在顶级while的同一周期内 您还可以模拟左下角,它会向右下方展开并立即完成模拟。

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

答案 1 :(得分:1)

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

当1,1的细菌生长成1,2时会产生问题,然后检查并生长到细胞1,3等等。

您也从1,1开始搜索(您可能希望从0,0开始并将数组扩展为1002 x 1002。

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