반응형
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=358&sca=99
#include <stdio.h>
int grid[105][105], R, C, SR, SC, s, e;
int dr[4] = { 1, -1, 0, 0 };
int dc[4] = { 0, 0, 1, -1 };
struct P { //BFS를 위한 Queue
int r, c, cnt;
} Que[50000];
void enq(int r, int c, int cnt) {
//방사능 오염된 저글링은 죽는 시간을 cnt로 표시함
Que[e].r = r; Que[e].c = c; Que[e++].cnt = cnt; grid[r][c] = cnt;
}
P deq() { return Que[s++]; }
bool check(int r, int c) {
//범위를 벗어나지 않고, 저글링이면 True 리턴
if (r < 1 || c < 1 || r > R || c > C) return false;
if (grid[r][c] == 1) return true;
else return false;
}
void BFS() {
enq(SR, SC, 3);
P curP;
while (s <= e) {
curP = deq();
for (int i = 0; i < 4; i++) {
if (check(curP.r + dr[i], curP.c + dc[i])) { //저글링이면
//감염되어 죽는시간으로 체크하여 Enque
enq(curP.r + dr[i], curP.c + dc[i], curP.cnt + 1);
}
}
}
}
int main(void) {
int lastcnt = 3, livecnt = 0;
scanf("%d%d", &C, &R);
//Input
for (int r = 1; r <= R; r++) //[1, R] 에 대입
for (int c = 1; c <= C; c++) scanf("%1d", &grid[r][c]);
scanf("%d%d", &SC, &SR);
//저글링 감염 수행
BFS();
//감염 전부 수행 후 체크
for (int r = 1; r <= R; r++)
for (int c = 1; c <= C; c++) {
//안 죽고 살아있는 저글링 체크
if (grid[r][c] == 1) livecnt++;
//가장 마지막에 죽은 저글링 시간 체크
else if (grid[r][c] > lastcnt) lastcnt = grid[r][c];
}
printf("%d\n%d\n", lastcnt, livecnt);
return 0;
}
반응형
'프로그래밍 알고리즘' 카테고리의 다른 글
[정올 1102] 스택 (stack) (0) | 2022.12.17 |
---|---|
[정올 1082] 화염에서탈출(SLIKAR) (0) | 2022.12.14 |
[정올 1060] 최소비용신장트리 (0) | 2022.12.14 |
[정올 1053] 피보나치 (0) | 2022.12.14 |
[정올 1021] 장난감 조립 (0) | 2022.12.14 |