https://www.acmicpc.net/problem/4963
풀이
bfs를 이용해서 갈 수 있는 모든 칸을 방문 처리해준 뒤 bfs 함수가 한 사이클 돌은 횟수가 곧 섬의 개수가 됩니다.
# 4963번 섬의 개수
import sys
from collections import deque
dxys = [[0,1],[0,-1],[1,0],[-1,0],[1,1],[1,-1],[-1,1],[-1,-1]]
# bfs 함수
def bfs(x, y):
queue = deque([[x,y]])
visited[y][x] = True
while queue:
cur_x, cur_y = queue.popleft()
for dx, dy in dxys:
nx, ny = cur_x + dx, cur_y + dy
if 0 <= nx < w and 0 <= ny < h and visited[ny][nx] == False and grid[ny][nx] == 1:
visited[ny][nx] = True
queue.append([nx, ny])
while True:
w, h = map(int, input().split())
if (w,h) == (0,0):
break
cnt = 0
grid = [list(map(int, sys.stdin.readline().split())) for _ in range(h)]
visited = [[False]*w for _ in range(h)]
for i in range(h):
for j in range(w):
if grid[i][j] == 1 and visited[i][j] == False:
bfs(j, i)
cnt += 1
print(cnt)
출력결과
'백준 > DFS&BFS' 카테고리의 다른 글
[백준][Python] 24444번 알고리즘 수업 - 너비 우선 탐색 1 - 코팩 (0) | 2022.11.08 |
---|---|
[백준][Python] 3184번 양 - 코팩 (0) | 2022.11.07 |
[백준][Python] 4485번 녹색 옷 입은 애가 젤다지? - 코팩 (0) | 2022.09.15 |
[백준][Python] 16439번 소년 점프 - 코팩 (0) | 2022.09.09 |
[백준] 7576번 토마토 - 파이썬 (0) | 2022.08.16 |