https://www.acmicpc.net/problem/4963
문제
사각형으로 구성된 섬과 바다의 지도를 얻을 수 있습니다.
섬의 수를 세는 프로그램을 작성하세요.
설명
문제를 셀 때 dfs로 푸는 습관이 있습니다.
. .
그러나 오늘은 재귀 깊이 제한을 반드시 해제하지 않았기 때문에 RecursionError가 발생했습니다.
import sys
sys.setrecursionlimit(10000)
놓치지 말자
일반적인 지역 찾기 문제지만 8방향으로 찾아야 한다는 차이가 있을 뿐입니다.
암호
import sys
sys.setrecursionlimit(10000)
def dfs(ground, visited, i, j, w, h):
visited(i)(j) = True
#12시 방향부터 시계방향으로 돌았을 때 좌표
di = (-1, -1, 0, 1, 1, 1, 0, -1)
dj = (0, 1, 1, 1, 0, -1, -1, -1)
for k in range(8):
ni = i+di(k)
nj = j+dj(k)
#범위 안에 있고, 건너갈 수 있는데 방문 전인 섬이라면 이어져 있다
if 0 <= ni < h and 0 <= nj < w:
if not visited(ni)(nj) and ground(ni)(nj) == 1:
dfs(ground, visited, ni, nj, w, h)
while True:
w, h = map(int, input().split())
#종료 시 0 0이 입력된다
if w == 0 and h == 0:
break
ground = (list(map(int, input().split())) for _ in range(h))
visited = ((False)*w for _ in range(h))
cnt = 0 #섬의 개수
for i in range(h):
for j in range(w):
#아직 탐색하지 않은 섬이라면
if not visited(i)(j) and ground(i)(j) == 1:
#이어진 섬 탐색
dfs(ground, visited, i, j, w, h)
#섬의 개수 추가
cnt += 1
print(cnt)