Computer Science/Algorithm
[Baekjoon] DFS/BFS - 4963 섬의 개수
ddu0422
2023. 9. 4. 15:48
문제
4963번: 섬의 개수
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도
www.acmicpc.net
풀이
import sys
from collections import deque
dx = [-1, -1, -1, 0, 1, 1, 1, 0]
dy = [1, 0, -1, -1, -1, 0, 1, 1]
def solution(graphs, x, y, visited, n, m):
if visited[x][y] or not graphs[x][y]:
return False
queue = deque([(x, y)])
visited[x][y] = True
while queue:
x, y = queue.popleft()
for i in range(len(dx)):
nx = x + dx[i]
ny = y + dy[i]
if not (0 <= nx < n and 0 <= ny < m):
continue
if visited[nx][ny] or not graphs[nx][ny]:
continue
queue.append((nx, ny))
visited[nx][ny] = True
return True
for line in sys.stdin:
x, y = map(int, line.rstrip().split())
if x == 0 and y == 0:
break
graphs = []
for _ in range(y):
graphs.append(list(map(int, sys.stdin.readline().rstrip().split())))
visited = [[False for _ in range(x)] for _ in range(y)]
answer = 0
for row in range(x):
for column in range(y):
if solution(graphs, column, row, visited, y, x):
answer += 1
print(answer)
채점 결과
