[C++]白駿7576トマト


「トマト」問題を見に行きます
その日にどのトマトが熟したかを区別する方法を考えれば難しくない問題だ.

ソースコード

#include <iostream>
#include <queue>
#include <utility>
using namespace std;
int M,N, cnt=0, result=0;
int xDir[4]={0,0,-1,1}, yDir[4]={1,-1,0,0};
queue<pair<int,int>> q;

int main() {
    cin >> M >> N;
    int box[N][M];
    for(int i=0;i<N;i++){
        for(int j=0;j<M;j++){
            cin>>box[i][j];
            if(box[i][j]==1) q.push(make_pair(i,j));
            
            else if(box[i][j]==0) cnt++;
        }
    }
    
    while(!q.empty()){
        pair<int, int> e;
        e = q.front();
        q.pop();

        for(int i=0;i<4;i++){
            int xPos = e.second+xDir[i], yPos=e.first+yDir[i];
            if(xPos < 0 || xPos > M-1 || yPos <0 || yPos > N-1) continue;
            if(box[yPos][xPos]==0){
                box[yPos][xPos]=box[e.first][e.second]+1;
                q.push(make_pair(yPos,xPos));
                cnt--;
            }
        }
    }

    for(int k=0;k<N;k++)
        for(int z=0;z<M;z++)
            if(box[k][z] > result) result = box[k][z];
            
    if(cnt != 0) result = -1;
    else result-=1;
    cout<<result;

}
私が適用するトマトの見分け方は以下の通りです.
完熟したトマトは表に1で示されているので、このトマトを初日に完熟したトマトと見なす.トマトを中心に、熟成した周囲のトマトは中心トマトの日付を基準に、1つ1つ増えて、何日目に熟成したトマトを表します.
BFSが終了すると、最大値が見つかり、その値から1が減算されます(問題では、すべての成熟に必要な日付を尋ねました).トマトがすべて熟成するまでの日数を出力します.