#include <stdio.h> #include <queue> using namespace std; typedef struct _zugling { int xz; int yz; char stat; int order; }zugling; int a, b, c, d, cnt_time, cnt_num; zugling map[102][102]; queue<zugling> myQueue; int x[] = { 0, 1, 0, -1 }; int y[] = { -1, 0, 1, 0 }; int main() { FILE* fin = fopen("input.txt", "rt"); FILE* fout = fopen("output.txt", "wt"); //scanf("%d %d", &a, &b); // 가로 세로 fscanf(fin, "%d %d", &a, &b); // 가로 세로 for (int i = 1; i <= b; i++) { char tmp; //scanf("%c", &tmp); fscanf(fin, "%c", &tmp); for (int j = 1; j <= a; j++) { //scanf("%c", &map[i][j].stat); fscanf(fin, "%c", &map[i][j].stat); if (map[i][j].stat == '1') map[i][j].xz = j, map[i][j].yz = i; } } //scanf("%d %d", &c, &d); fscanf(fin,"%d %d", &c, &d); // algo map[d][c].order = 3; map[d][c].stat = 0; myQueue.push(map[d][c]); zugling fr = myQueue.front(); cnt_time = map[d][c].order; // !실수했던 부분! - 1마리만 오염되는 상황에서 예외가 발생함. // 큐가 비어있을때 까지 while (!myQueue.empty()) { fr = myQueue.front(); myQueue.pop(); // 4방향 검사 for (int dir = 0; dir < 4; dir++) { if (map[fr.yz + y[dir]][fr.xz + x[dir]].stat == '1') // 1이면 살아있는 주변 저글링 { map[fr.yz + y[dir]][fr.xz + x[dir]].stat = '0'; // 죽은걸로 표시 map[fr.yz + y[dir]][fr.xz + x[dir]].order = map[fr.yz][fr.xz].order + 1; // 주변 저글링에 1 증가 myQueue.push(map[fr.yz + y[dir]][fr.xz + x[dir]]); // 큐에 담는다. cnt_time = (cnt_time > map[fr.yz + y[dir]][fr.xz + x[dir]].order) ? cnt_time : map[fr.yz + y[dir]][fr.xz + x[dir]].order; } } } // 마지막 검사 for (int i = 1; i <= b; i++) { for (int j = 1; j <= a; j++) { if (map[i][j].stat == '1') cnt_num++; } } //printf("%d\n%d\n", cnt_time + 2, cnt_num); fprintf(fout, "%d\n%d\n", cnt_time, cnt_num); } |