mickeyshoes   2년 전

안녕하세요 :) 이제 막 bfs, dfs 에 입문한 그린입니다..

꽤 오랜 시간 디버깅을 했는데 이유를 잘 모르겠어서.. 질문 남겨봅니다..ㅜ

bfs 를 사용해서 구현하였습니다.

문제가 되는 상황은 아직 방문하지 않은 곳이 True 로 초기화가 되어 있는 문제입니다.

문제가 되는 상황은 다음과 같습니다.

ex)

  1. (0,1) 이 1이면서 아직 방문하지 않은 좌표이므로 방문
  2. 0,1 주위에 1이면서 방문하지 않은 좌표 찾기
  3. 1,1 이 1이면서 방문하지 않은 좌표이므로 방문
  4. 그러나 이미 True 로 아래와 같이 초기화 되어 있음( True 로 초기화는 큐에서 꺼낼때만 하고 있습니다)
  5. 1행의 방문 기록=>[False, True, False, False, False, False, False]

코린이에게 도움을 주세요.. 답변 남겨주시면 감사하겠습니다

dbshin59   2년 전

파이썬에서 2차원 배열을 만드는 방법이 잘못되었습니다.

visited = [[False]* N] * N 이 뜻하는 것은, 그저 요쇼를 복사하는 것을 뜻하는 것일 뿐입니다.

배열은 포인터입니다. 그런 배열을 그대로 복사하니, 포인터마저 그대로 복사합니다.

결국 여러 개의 똑같은 값을 가리키게 되어버립니다.

예를 들어, visited[0][1] 을 True로 바꾸면, visited[0]의 포인터 = visited[1]의 포인터 이기 때문에, visited[0][1] = visited[1][1] 이 되어버립니다.

제대로 된 2차원 배열을 만드는 방법은,

two_array = [[False]*N for _ in range(N)]

처럼 for문을 이용해야 합니다. (이것에 대해서는 검색을 추천드립니다.)

mickeyshoes   2년 전

와.. 이 점은 전혀 생각치도 못했네요.. 답변 정말 감사드립니다.

댓글을 작성하려면 로그인해야 합니다.