2025-07-29 22:35:28 +09:00

62 lines
1.6 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int N, M;
scanf("%d %d",&N, &M);
char** campus = (char**)malloc(sizeof(char*)*N);
int** visited = (int**)malloc(sizeof(int*)*N);
for(int i=0; i<N; i++) {
campus[i] = (char*)malloc(sizeof(char)*(M+1));
visited[i] = (int*)malloc(sizeof(int)*M);
memset(visited[i], 0, sizeof(int)*M);
}
int* queueX = (int*)malloc(sizeof(int)*(N*M));
int* queueY = (int*)malloc(sizeof(int)*(N*M));
for(int n=0; n<N; n++){
scanf("%s",campus[n]);
for(int m=0; m<M; m++){
if(campus[n][m] == 'I'){
queueY[0] = n;
queueX[0] = m;
visited[n][m] = 1;
}
}
}
int front = 0, rear = 1, friendCount = 0;
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
while(front<rear){
int x = queueX[front];
int y = queueY[front];
front++;
for(int i=0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx<0 || nx>=M || ny<0 || ny>=N || visited[ny][nx] || campus[ny][nx] == 'X') continue;
visited[ny][nx] = 1;
queueX[rear] = nx;
queueY[rear] = ny;
rear++;
if(campus[ny][nx] == 'P') friendCount++;
}
}
if(friendCount) printf("%d\n",friendCount);
else printf("TT\n");
for(int i=0; i<N; i++){
free(campus[i]);
free(visited[i]);
}
free(campus);
free(visited);
free(queueX);
free(queueY);
return 0;
}