어느 문제인지 모르겠지만, 각 탐색 방향에 대해 가중치가 동일함이 보장 되나요 ?
BFS는 기본적으로 모든 간선이 동일한 가중치를 갖는 그래프에선 항상 최단경로를 보장합니다.
16236번 - 아기 상어
수정했습니다. @pill27211 님이 설명해주신 것은 이해가 됐습니다. 다만 if문을 통해 최소 값을 탐색하지만 반례가 발생하는 이유를 찾을 수 없었습니다.
아기 상어 문제같은 경우에는, 거리는 같으나 우선순위의 차이가 존재 합니다.
결론부터 말씀 드리면, dx[]와 dy[]의 여부보다, 이하 로직에서의 조건 처리가 더 중요합니다.(아래 로직에서의 조건 분기가 완벽하다면, dx[], dy[]는 정답 여부와 상관 없습니다)
아기 상어의 이동을 결정하는 데엔
제일 우선적으로 '거리' 그 다음엔 '행' 그 다음엔 '열' 순서로 우선순위를 갖습니다.
바로 이것에 대해 어떻게 처리 하는지(큐 2개 사용, 우선순위 큐 사용, 큐에 삽입 순서 등등)가 문제이지, dx[], dy[]의 순서는 중요치 않습니다.
자세히 살펴본 결과 방향 순서 문제가 아닌 구현 실수로 우연히 정답이 맞게 나왔던 것입니다. 답변해 주신 분들 덕분에 해결할 수 있었습니다. :) @pill27211 @ufshg
댓글을 작성하려면 로그인해야 합니다.
tjseocld 1년 전
안녕하세요! BFS로 문제를 풀 때 , 밑의 소스와 같이 이동할 좌표 값을 미리 선언해 두고 for문으로 돌아가면서 주변을 탐색하는 코드에서
탐색 순서에 따라 값이 바뀌는데 , Check 배열로 방문 확인도 확인도 하고 Queue에 들어가는 순서가 다를 수 있지만 , 이게 반례를 만들어 낼 수 있다는 게 이해하기 힘듭니다. 왜 탐색 순서에 따라 값이 바뀌는지 설명해 주실 분 계신가요?
추가 : BFS 가 양쪽으로 동일한 가중치를 뻗어가는 것은 이해를 했습니다. 다만 해당 코드에서 항상 최단 경로를 검사함에도 반례가 발생했습니다.