섬의 개수
- 정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다
- 섬의 개수를 세는 프로그램 작성
- 대각선으로의 이동은 어떻게 확인하지 ?
- 기존에는 dx,dy 배열에 상하좌우를 넣어서 확인해줬다.
- 그 안에 대각선으로 이동할 경우를 추가해준다.
import sys
sys.setrecursionlimit(10000)
input: sys.stdin.readline
def isSafe(x, y): return 0 <= x < h and 0 <= y < w and arr[x][y] != 0
def DFS(x, y):
check[x][y] = True
for i in range(8):
nx, ny = x+dx[i], y+dy[i]
if isSafe(nx, ny) and not check[nx][ny]:
DFS(nx, ny)
dx = [0, 1, 1, 1, 0, -1, -1, -1]
dy = [1, 1, 0, -1, -1, -1, 0, 1]
while True:
w, h = map(int, input().split())
if (w, h) == (0, 0):
break
arr = [list(map(int, input().split())) for _ in range(h)]
check = [[False]*w for _ in range(h)]
cnt = 0
for i in range(h):
for j in range(w):
if arr[i][j] == 1 and not check[i][j]:
DFS(i, j)
cnt += 1
print(cnt)