본문 바로가기

BackJoon

2178번 미로탐색 [Python]

dfs로 풀어보았따.

def dfs(y, x, depth):
    if x < 0 or y < 0 or y >= N or x >= M: #영역초과
        return

    if y == N-1 and x == M-1: #도착
        global Min
        if depth < Min:
            Min = depth
        return

    for i in range(4):
        wX = x + dir[i][0]
        wY = y + dir[i][1]
        if wX < 0 or wY < 0 or wY >= N or wX >= M:  # 영역초과
            pass
        elif visit[wY][wX] == 0 and map[wY][wX] == '1':
            visit[wY][wX] = 1
            dfs(wY, wX, depth+1)
            visit[wY][wX] = 0


N, M = map(int, input().split())
map = [""] * N
visit = [[0] * M for _ in range(N)]
dir = [[0, 1], [1, 0], [0, -1], [-1, 0]]

Min = N*M

for i in range(N):
    map[i] = input()

dfs(0,0,1)
print(Min)


근데 런타임에러로 안된다;; 재귀를 사용해서그런가. 스택으로 변환해보려다가 이런문제는 bfs로 푸는거라고 인터넷지식인분들이 말씀해주셔서 bfs를 공부해서 풀어보았다.


그래서 bfs로 풀었다

def bfs():
    arr = []
    arr.append([0, 0])
    visit[0][0] = 1
    while arr:
        cur = arr.pop(0)
        x = cur[0]
        y = cur[1]
        if cur == [row-1, col-1]:
            print(visit[x][y])
            break
        now = visit[x][y]
        for i in range(4):
            wx = x + dir[i][0]
            wy = y + dir[i][1]
            if wx >= row or wy >= col or wx < 0 or wy < 0:
                continue
            if visit[wx][wy] == 0 and map[wx][wy] == '1':
                visit[wx][wy] = now + 1
                arr.append([wx, wy])

row, col = map(int, input().split())
map = [""] * row
visit = [[0] * col for _ in range(row)]
dir = [[0, 1], [1, 0], [0, -1], [-1, 0]]

for i in range(row):
    map[i] = input()

bfs()


'BackJoon' 카테고리의 다른 글

2512 예산 [Python]  (0) 2016.12.01
1937 욕심쟁이 판다 [Python]  (0) 2016.12.01
11722 가장 긴 감소하는 부분 수열 [python]  (0) 2016.12.01
9095 1, 2, 3 더하기  (0) 2016.11.05
1149 RGB거리  (0) 2016.11.03