bj섬의개수

coh·2022년 6월 23일
0

백준

목록 보기
25/27

DFS, BFS 둘다 풀 수 있는 문제

이미 방문한 곳은 훼손을 시켜서 다시 방문하지 않도록 만들어주면 되는 문제였음. 한 가지 다른 점은 대각선도 고려해줘야 한다는 것!
방문한 곳의 훼손은 data 값을 하나씩 더해서 1이 아닌 상태로 만들어 줬음!!

import sys


def dfs(graph, start):
    stack = [start]
    dx = [1,-1,0,0,1,1,-1,-1]
    dy = [0,0,1,-1,1,-1,1,-1]
    while stack:
        x, y = stack.pop()
        for i in range(8):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0<=nx<m and 0<=ny<n and graph[nx][ny] == 1:
                stack.append((nx,ny))
                graph[nx][ny] = graph[x][y] + 1


while True:
    n,m = map(int, input().split())
    if n == 0 and m == 0:
        break
    card = []
    for _ in range(m):
        card.append(list(map(int, sys.stdin.readline().split())))
    cnt = 0
    for i in range(m):
        for j in range(n):
            if card[i][j] == 1:
                cnt += 1
                dfs(card, (i,j))

    print(cnt)
profile
Written by coh

0개의 댓글