说明
有一个方形培养皿,其长度和宽度分别为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)
我的实施有什么问题?非常感谢提前!
答案 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。
您还需要检查您正在生长的细胞是否实际上在培养皿内(目前,您的细菌可以在培养皿外生长(从内部),从而产生不正确的结果。)