Algorithm(CodeTree, Python)/BFS
[코드트리] 갈 수 있는 곳들 Python
kurooru
2023. 2. 28. 17:56
# n, m 입력
n, m = map(int, input().split())
# grid 입력
grid = [
list(map(int, input().split()))
for _ in range(n)
]
# start_points
start_points = [
tuple(map(int, input().split()))
for _ in range(m)
]
# in_range(x, y)
def in_range(x, y):
return 0 <= x < n and 0 <= y < n
# can_go(x, y)
def can_go(x, y):
# 범위 내에 있고, 방문한 적 없으며, 0이면 가능
return in_range(x, y) and not visited[x][y] and not grid[x][y]
# bfs()
def bfs():
# 전역 변수 선언
global cnt
while q:
x, y = q.popleft()
dxs, dys = [-1, 1, 0, 0], [0, 0, -1, 1]
for dx, dy in zip(dxs, dys):
nx, ny = x + dx, y + dy
# 갈 수 있으면
if can_go(nx, ny):
# cnt 올려주고
cnt += 1
# 큐에 넣어주고
q.append((nx, ny))
# 방문 처리
visited[nx][ny] = True
# 설계
# visited
visited = [
[False] * n
for _ in range(n)
]
# 큐 사용준비
from collections import deque
q = deque()
# cnt
cnt = 0
# start_points를 돌면서
for point in start_points:
# unpacking
x, y = point
x -= 1
y -= 1
# 방문하지 않은 점이면
if not visited[x][y]:
# cnt 올려주고
cnt += 1
# 큐에 넣어주고
q.append((x, y))
# 방문 처리 후
visited[x][y] = True
# bfs
bfs()
# 출력
print(cnt)