#include<stdio.h>
typedef struct {
int sero;
int garo;
int idx;
int stat;
} _zergling;
하나로 모두 묶을 수 없기 때문에, 두가지를 동시에 사용해야 한다.
Zergling(가로,세로,idx)과 map(stat) 두개를 사용해서 처리
_zergling map[100][100];
_zergling Zergling[1000000];
int maps[100][100];
int cnt_time;
int Dx[] = { 0, 1, 0, -1 };
int Dy[] = { -1, 0, 1, 0 };
void main()
{
freopen("input.txt", "r", stdin);
int garo; int sero;
scanf("%d %d", &garo, &sero);
for (int i = 0; i < sero; i++)
{
for (int j = 0; j < garo; j++)
{
scanf("%1d", &map[i][j].stat);
maps[i][j] = map[i][j].stat;
if (map[i][j].stat == 1)
{
map[i][j].garo = j;
map[i][j].sero = i;
}
}
}
int zerg_garo = 0;
int zerg_sero = 0;
scanf("%d %d", &zerg_garo, &zerg_sero);
int head = 0; int tail = 0;
map[zerg_sero - 1][zerg_garo - 1].stat = 0;
Zergling[tail].idx = 3;
Zergling[tail].garo = zerg_garo - 1;
Zergling[tail].sero = zerg_sero - 1;
cnt_time = map[zerg_sero - 1][zerg_garo - 1].idx;
tail++;
int a = 0;
while (1)
{
if (head == tail) break;
for (int dir = 0; dir < 4; dir++)
{
int garo_t = Zergling[head].garo + Dx[dir];
int sero_t = Zergling[head].sero + Dy[dir];
if (map[sero_t][garo_t].stat == 1)
{
a++;
map[sero_t][garo_t].stat = 0;
Zergling[tail].idx = Zergling[head].idx + 1;
Zergling[tail].garo = garo_t; // myqueue.push 의 다른 표현?
Zergling[tail].sero = sero_t;
cnt_time = (cnt_time > Zergling[tail].idx) ? cnt_time : Zergling[tail].idx;
tail++;
}
}
head++;
}
int cnt_num = 0;
for (int i = 0; i < sero; i++)
{
for (int j = 0; j < garo; j++)
{
scanf("%1d", &map[i][j].stat);
if (map[i][j].stat == 1)
{
cnt_num++;
}
}
}
printf("%d\n%d", Zergling[head - 1].idx, cnt_num);
}