반응형
4963번: 섬의 개수
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도
www.acmicpc.net
코드
import sys
from collections import deque
def bfs(x,y):
dx = [-1,-1,-1,0,0,1,1,1]
dy = [-1,0,1,-1,1,-1,0,1]
queue = deque()
queue.append((x,y))
while queue:
x,y = queue.popleft()
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<h and 0<=ny<w and graph[nx][ny] == 1:
queue.append((nx,ny))
graph[nx][ny] = 0
while 1:
w,h = map(int,sys.stdin.readline().split())
if w == 0 and h == 0:
break
graph = []
cnt = 0
for i in range(h):
graph.append(list(map(int,input().split())))
for i in range(h):
for j in range(w):
if graph[i][j] == 1:
bfs(i,j)
cnt += 1
print(cnt)
설명
처음에 위,아래,왼쪽,오른쪽이 붙어있는 경우만 고려했는데 문제를 다시 읽어보니 대각선으로 연결되어도 하나의 섬으로 세는 것이었다.
전에 풀었던 문제와 같이 bfs를 이용했고 대각선도 고려해야 되기 때문에 dx와 dy에만 값을 더 추가했다.
반응형
'알고리즘 > 그래프 탐색' 카테고리의 다른 글
[백준][Python] 14502번 연구소 (0) | 2022.11.09 |
---|---|
[백준][Python] 1697번 숨바꼭질 (0) | 2022.10.26 |
[백준][Python] 11724번 연결 요소의 개수 (0) | 2022.10.06 |
[백준][Python] 1012번 유기농 배추 (0) | 2022.10.05 |
[백준][Python] 2178번 미로 탐색 (0) | 2022.10.04 |
댓글