-6

説明:

長さと幅の両方が L で、L*L のスロットがある正方形のペトリ皿があります。スロットには、細菌が含まれているもの、抗生物質が含まれているもの、きれいなものがあります。すべての細菌は個別に繁殖し、抗生物質を含む細菌を除いて、1 つの細菌が 1 日のうちに 4 つの地域すべてで繁殖します。皿全体をいっぱいにするのに何日かかるかを調べますか?

入力フォーマット:

行 1: 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 左下隅もシミュレートし、それが右下に広がり、すぐにシミュレーションを終了します。

これに対する 1 つの解決策は、2 つの配列を使用し、一方から読み取り、他方に書き込み、各サイクルの終わりにそれらを交換することです。

于 2013-06-06T11:29:25.330 に答える