관리 메뉴

즐겁게, 코드

백준 4963번 : 섬의 개수 본문

💯 알고리즘/백준 온라인 저지

백준 4963번 : 섬의 개수

Chamming2 2021. 5. 30. 00:32

[백준 온라인 저지 링크]

 

4963번: 섬의 개수

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도

www.acmicpc.net

특별한 점은 없는 탐색 문제입니다!

다만, 섬을 사방이 아니라 대각선까지 탐색해야 한다는 점에만 유의하세요!

 

[정답 코드 - Python]

from collections import deque

dy = [-1, 0, 1, 0, -1, 1, 1, -1]
dx = [0, 1, 0, -1, 1, 1, -1, -1]


def BFS(node):
    q = deque()
    q.append(node)
    global visited
    visited[node[0]][node[1]] = True

    while q:
        y, x = q.pop()
        for i in range(8):
            ny = y + dy[i]
            nx = x + dx[i]
            if 0 <= ny < h and 0 <= nx < w:
                if visited[ny][nx] == False and board[ny][nx] == 1:
                    q.append((ny, nx))
                    visited[ny][nx] = True


while 1:
    w, h = map(int, input().split())
    visited = [[False] * w for _ in range(h)]
    board = []
    cnt = 0

    if w == 0 and h == 0:
        break

    for _ in range(h):
        board.append(list(map(int, input().split())))

    for row in range(h):
        for col in range(w):
            if board[row][col] == 1 and visited[row][col] == False:
                BFS((row, col))
                cnt += 1

    print(cnt)
    cnt = 0

 

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆