inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Giới thiệu về giải bài toán bằng thuật toán Python (chuẩn bị cho bài kiểm tra viết mã)

10. Điều hướng mê cung (DFS)

안녕하세요? 제 코드에서 도저히 이해할 수 없는 결과가 나와서 질문드립니다.

Đã giải quyết

398

drather

6 câu hỏi đã được viết

1

강의를 정말 잘 보고 있습니다. 날이 무더운데, 더위 조심하시기 바랍니다. 

선생님의 코드와 굉장히 유사하나, 다른점은 저는 check 배열을 통해 방문한 곳, 방문하지 않은 곳을 표시했다는 점입니다. 

이에 따라, for문 안에서, 탐색할 x, y 좌표가 0부터 6까지인지 확인하는 조건문 2개와, board[new_x][new_y]가 0 인지를 확인하는 부분, check[new_x][new_y], 즉 이전에 방문한 노드인지를 확인해서 그 좌표에 대해 DFS를 호출했습니다. 

나머지 부분은 선생님의 코드와 동일합니다. 

그 결과, 원래 정답의 2배를 ANSWER의 값으로 출력했습니다. 제 예상으로는, 이미 갔던 경로를 한번 더 탐색하는것 같은데, 어떤 이유인지는 잘 모르겠습니다. 

비록 남의 코드를 보고 에러를 잡는다는게 쉬운일은 아니지만, 정말 이해가 되지 않아 답답한 마음에 질문 드립니다 ㅠㅠㅠ

import sys

from _collections import deque as dq


def dfs(v):
global answer
print("\n현재 위치: ", v)
if v[0] == 6 and v[1] == 6:
print("찾음, answer:", answer)
answer += 1
return

else:

for j in range(4):
new_row = v[0] + d_row[j]
new_col = v[1] + d_col[j]

if 0 <= new_row < 7 and 0 <= new_col < 7 and check[new_row][new_col] == 0 and board[new_row][new_col] == 0:
print("다음 위치: ", [new_row, new_col])
target = [new_row, new_col]
check[new_row][new_col] = 1
dfs(target)

check[new_row][new_col] = 0


if __name__ == "__main__":

sys.stdin = open("in.txt", "rt")

d_row = [-1, 0, 1, 0]
d_col = [0, 1, 0, -1]

board = []
for _ in range(7):
board.append(list(map(int, input().split())))

check = [[0] * 7 for i in range(7)]
start = [0, 0]
end = [6, 6]

answer = 0

dfs(start)

print(answer)

python 코테 준비 같이 해요!

Câu trả lời 2

1

drather

평생 몰랐을뻔한 오류를 잡아주셔서  정말 감사합니다

1

codingcamp

안녕하세요^^

출발지점을 체크하지 않아 생기는 현상입니다.

check[0][0]=1

dfs(start)

와 같이 출발지점을 체크하고 dfs를 호출하면 됩니다.

기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.

1

98

2

스택에서 ')'을 만나는 경우

0

103

3

문제가 어디있나요?

0

84

2

변수 or 함수명

0

76

1

침몰하는 타이타닉 문제 질문입니다

0

70

1

AA.py 책점 에러

0

63

1

오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.

0

114

2

5.동전분배하기 문제 밑에코드도 정답이될까요?

0

114

1

아나그램 비교 코드

0

121

2

AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.

0

163

2

문제 링크가있나여?

0

152

2

채점기 Time Limit Exceeded 오류 문의

1

175

2

동적계획법은 사용하는 문제

0

130

2

제 코드 좀 봐주세요

0

154

1

예외가 존재할 가능성?

0

99

1

3번이 안풀립니다

0

97

0

5번 틀림

0

121

0

오류원인?

0

103

0

리스트 선언

0

113

1

침몰하는 타이타닉(그리디) 문제 질문

0

114

1

알고리즘

0

71

1

코딩테스트

0

98

1

DFS 순서 질문드립니다.

0

133

2

left, right를 사용한 풀이법에 대한 질문입니다

0

93

1