https://www.acmicpc.net/problem/21736
풀이
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <queue>
using namespace std;
int N, M, Sum;
int Campus[600][600];
queue<pair<int, int>> Data;
int DirI[4]{-1, 0, 1, 0};
int DirJ[4]{0, 1, 0, -1};
void BFS()
{
while (!Data.empty())
{
int CurI = Data.front().first;
int CurJ = Data.front().second;
Data.pop();
for (int k = 0; k < 4; ++k)
{
int CheckI = CurI + DirI[k];
int CheckJ = CurJ + DirJ[k];
if (CheckI < 0 || CheckJ < 0 || CheckI >= N || CheckJ >= M)continue;
if (Campus[CheckI][CheckJ] == 'X') continue;
if (Campus[CheckI][CheckJ] == 'P') Sum++;
Campus[CheckI][CheckJ] = 'X';
Data.push(make_pair(CheckI, CheckJ));
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N >> M;
for (int i = 0; i < N; ++i)
{
string Str;
cin >> Str;
for (int j = 0; j < M; ++j)
{
Campus[i][j] = Str[j];
if (Str[j] == 'I')
{
Data.push(make_pair(i, j));
}
}
}
BFS();
if (Sum > 0) cout << Sum;
else cout << "TT";
return 0;
}