import sys from collections import deque input = sys.stdin.readline for _ in range(int(input())): M,N = map(int,input().split()) arr = [] sange = [] fire_set = set() visited = [[True]*M for _ in range(N)] for x in range(N): input_list = list(input().strip()) for y in range(M): if input_list[y] == '*': fire_set.add((x,y)) elif input_list[y] == '@': sange.append((x,y)) visited[x][y] = False input_list[y] = '.' arr.append(input_list) dx = [-1,1,0,0] dy = [0,0,-1,1] times = 0 result = 'IMPOSSIBLE' flag = False while sange: new_sange = [] new_fire = set() for fire in fire_set: for i in range(4): nx = fire[0] + dx[i] ny = fire[1] + dy[i] if 0<=nx<N and 0<=ny<M: if arr[nx][ny] == '.': new_fire.add((nx,ny)) arr[nx][ny] = '*' for sa in sange: for i in range(4): nx = sa[0] + dx[i] ny = sa[1] + dy[i] if 0<=nx<N and 0<=ny<M: if visited[nx][ny] and arr[nx][ny] == '.': new_sange.append((nx,ny)) visited[nx][ny] = False else: result = times+1 flag = True break if flag: break times += 1 sange = new_sange[:] fire_set = new_fire print(result)
import sys from collections import deque input = sys.stdin.readline def bfs(stack): dx = [-1,1,0,0] dy = [0,0,-1,1] while stack: x,y = stack.popleft() flag = visited[x][y] if visited[x][y] != 'FIRE' else 'FIRE' for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0<=nx<N and 0<=ny<M: if visited[nx][ny] == -1 and (arr[nx][ny] == '.' or arr[nx][ny] == '@'): if flag == 'FIRE': visited[nx][ny] = flag else: visited[nx][ny] = flag + 1 stack.append((nx,ny)) else: if flag != 'FIRE': return flag + 1 return 'IMPOSSIBLE' for _ in range(int(input())): M,N = map(int,input().split()) stack = deque() arr = [] visited = [[-1]*M for _ in range(N)] for x in range(N): input_list = input() for y in range(M): if input_list[y] == '*': stack.append((x,y)) visited[x][y] = 'FIRE' elif input_list[y] == '@': start = (x,y) visited[x][y] = 0 arr.append(input_list) stack.append(start) print(bfs(stack))
'알고리즘 > 백준_복기_미완료' 카테고리의 다른 글
[BOJ/백준] 6137 문자열 생성 (0) | 2021.05.03 |
---|---|
[BOJ/백준] 6118 숨바꼭질 (0) | 2021.05.03 |
[BOJ/백준] 4195 친구 네트워크 (0) | 2021.05.03 |
[BOJ/백준] 3954 Brainf**k 인터프리터 (0) | 2021.05.03 |
[BOJ/백준] 3584 가장 가까운 공통 조상 (0) | 2021.05.03 |