๋ค์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ ์นธ์ ๋ฐฉ๋ฌธํ ๋ ๊น์ด๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ
BFS์์๋ popleft๋ฅผ ํ๋ค๋ฉด DFS์์๋ pop์ ํ๋ค. ์ฆ ๋์ค์ ๋ค์ด์จ ๊ฒ์ ๋จผ์ ํ์ํ๋ค.

BFS์์ ์์์ ์ ์ค์์ผ๋ก ์ก์๋ค๋ฉด ์ํ์ข์ฐ๋ก ํ์ํ๋ ๊ฒ์ ์ ์ ์๋ค.
DFS์์๋ ์์์ ์ ์ค์์ผ๋ก ์ก์๋ค๋ฉด ํ๋์ ๋ถ๊ธฐ์ ์ ๋ชจ๋ ํ์ํด์ผ ๋ค์ ๋ฐฉํฅ์ผ๋ก ๋๊ฐ ์ ์๋ค.
ํ์ง๋ง, ํ์ฌ ๋ณด๋ ์นธ์ผ๋ก๋ถํฐ ์ถ๊ฐ๋๋ ์ธ์ ํ ์นธ์ ๊ฑฐ๋ฆฌ๊ฐ ํ์ฌ ๋ณด๋ ์นธ๋ณด๋ค 1๋งํผ ๋ ๋จ์ด์ ธ ์๋ค๋ ์ฑ์ง์ด DFS์์๋ ์ฑ๋ฆฝ ๋์ง ์๋๋ค.
์ฆ, ๊ฑฐ๋ฆฌ ๊ณ์ฐ์ DFS๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ฒฐ๊ตญ, ๋ค์ฐจ์ ๋ฐฐ์ด์์ BFS ๋์ DFS๋ฅผ ์จ์ผํ๋ ์ผ์ด ์๋ค.
-> DFS๋ ํธ๋ฆฌ์ ๊ทธ๋ํ์์ ํ์ํ๋ฏ๋ก ์๊ณ ์์ด์ผ ํ๋ค.
import sys
N, M = map(int, sys.stdin.readline().split())
mat = [
[0, 1, 1, 1, 1, 1],
[0, 1, 0, 0, 0, 1],
[0, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 0, 0],
[0, 0, 0, 1, 1, 0],
[1, 1, 1, 1, 1, 0]
]
# for _ in range(N):
# row = list(map(int, input().split()))
# mat.append(row)
print(mat)
visited=[[False]*M for _ in range(N)]
def DFS(visited,y,x):
dx=[-1,0,0,1]
dy=[0,1,-1,0]
visited[y][x]=True
stack=[]
stack.append([y,x])
while stack:
value=stack.pop()
for i in range(4):
nx=value[1]+dx[i]
ny=value[0]+dy[i]
if (ny<0 or nx<0 or ny>=M or nx>=N):
continue
if mat[ny][nx]==1:
continue
if not visited[ny][nx]:
stack.append([ny,nx])
visited[ny][nx]=True
DFS(visited,0,0)