π³ λ§ν¬
π λ¬Έμ
NΓMν¬κΈ°μ λ°°μ΄λ‘ ννλλ λ―Έλ‘κ° μλ€.
1 0 1 1 1 1
1 0 1 0 1 0
1 0 1 0 1 1
1 1 1 0 1 1
λ―Έλ‘μμ 1μ μ΄λν μ μλ μΉΈμ λνλ΄κ³ , 0μ μ΄λν μ μλ μΉΈμ λνλΈλ€. μ΄λ¬ν λ―Έλ‘κ° μ£Όμ΄μ‘μ λ, (1, 1)μμ μΆλ°νμ¬ (N, M)μ μμΉλ‘ μ΄λν λ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€. ν μΉΈμμ λ€λ₯Έ μΉΈμΌλ‘ μ΄λν λ, μλ‘ μΈμ ν μΉΈμΌλ‘λ§ μ΄λν μ μλ€.
μμ μμμλ 15μΉΈμ μ§λμΌ (N, M)μ μμΉλ‘ μ΄λν μ μλ€. μΉΈμ μ λμλ μμ μμΉμ λμ°© μμΉλ ν¬ν¨νλ€.
πΎ νμ΄ λ°©λ²
- n,mκ³Ό miroλ₯Ό μ°¨λ‘λλ‘ λ°μμ€λ€.
- μ΄λ, miroμ λ€μ΄μ€λ κ°λ€μ μ«μκ° λΆμ΄μ λ€μ΄μ€λ―λ‘ strμΌλ‘ λ°μ μ± listν νμ¬ μ΄μ©νλ κ²μ΄ νΈνλ€.
- (0,0)λΆν° μμνμ¬ μ΄μ λ Έλλ€μ λ°©λ¬Ένλ€.
- λ°©λ¬Έν λ, visit λ°°μ΄μ κ°μ μ΄μ
visit λ°°μ΄μ μ μ₯λ κ° + 1
μ ν΄μ€λ€.
- μ΄μ λ, μκ° μ΄κ³Όλ₯Ό ν΄κ²°νκΈ° μν΄μμ΄λ€. λ€μ μ μΌ μ²μμΌλ‘ λμκ°λ κ²μ΄ μλ μ΄μ κ°μ +1μ ν¨μΌλ‘μ¨ μ΅μ’ (n-1,m-1)μ λλ¬νμμ λ μ΅μκ°μ visit λ°°μ΄μ μ μ₯ν μ μλ€.
solution μ½λ
- bfsλ‘ solveν μ½λ
import sys sys.setrecursionlimit(10**8) sys.stdin = open("input.txt","rt")
dx = [1,-1,0,0]
dy = [0,0,1,-1]
n,m = [int(x) for x in sys.stdin.readline().split()]
answer = n*m + 1
visit = [[0] * m for _ in range(n)]
visit[0][0] = 1
miro = [list(sys.stdin.readline().strip()) for _ in range(n)]
q = []
q.append((0,0))
while q:
x, y = q.pop(0)
if x == n-1 and y == m-1:
print(visit[x][y])
sys.exit()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if visit[nx][ny] == 0 and miro[nx][ny] == '1':
visit[nx][ny] = visit[x][y] + 1
q.append((nx,ny))
2. dfsλ‘ μκ°μ΄κ³Ό μ½λ
bfsλ‘ λ¬Έμ λ₯Ό λ€μ νμ΄λ³΄λ©° λ μκ°μ΄, (n,m)κΉμ§μ μ΅λ¨ 거리λ₯Ό ꡬνλ λ¬Έμ μ΄λ―λ‘ dfsμ²λΌ μ²μλΆν° (n,m)κΉμ§ λλ¬ν λ€ λ€λ‘ λΉ μ Έλμ€λ©° λ€λ₯Έ κ²½λ‘λ₯Ό νμνλ λ°©λ²λ³΄λ€λ bfsμ²λΌ μ΄μ λ
Έλλ€μ λͺ¨λ νμνμ¬ visitμ κ²½λ‘ κ°μ λμ ν λ€, μ΅μ’
λλ¬νμ λ visit[n-1][m-1]μ κ°μ μΆλ ₯νλ κ²μ΄ λ λΉ λ₯΄κ³ , μ νν λ°©λ²μ΄λΌλ μκ°μ΄ λ€μλ€.
```python3
import sys
sys.setrecursionlimit(10**8)
sys.stdin = open("input.txt","rt")
dx = [1,-1,0,0]
dy = [0,0,1,-1]
def dfs(x,y, cnt):
global answer
if x == n-1 and y == m-1:
answer = cnt if answer > cnt else answer
else:
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m and visit[nx][ny] == 0 and miro[nx][ny] == '1':
visit[nx][ny] = 1
dfs(nx,ny,cnt+1)
visit[nx][ny] = 0
n,m = [int(x) for x in sys.stdin.readline().split()]
answer = n*m + 1
visit = [[0] * m for _ in range(n)]
visit[0][0] = 1
miro = [list(sys.stdin.readline().strip()) for _ in range(n)]
# miro = [sys.stdin.readline().rstrip() for _ in range(n)]
dfs(0,0,1)
print(answer)