DP로 최단거리를 못구하는이유는 무한루프에 걸리기 때문이라고 알고있습니다. 오른쪽과아래로만 이동이 가능하다면
무한루프에 걸리지않지만 상하좌우가 다 움직인다면 무한루프에 걸리고 이를 방지하려면 캐시에 방문한 상태를 넣어줘야 하겠죠
그래도 제가 아는 DP로 최단 거리구하는 방법은 2가지가 있는데,
첫째는 비트마스크로 방문한 지점을 캐시에 넣어주는 방법이 있습니다.
하지만 일반적으로 2^(N*M)만큼의 공간복잡도를 필요로하므로 N*M이 굉장히 작을때에만 사용할 수 있습니다.
둘째는 map으로 메모이제이션을 하는 방법입니다.
2차원 좌표의 상태가
0100
0010
1100 이라면,
string s="010000101100" 으로 두고 map<string,int> 로 메모이제이션이 가능해집니다.
하지만 이 방법은 시간복잡도가 굉장히 커져서 왠만한 N*M크기로 사용하면 시간초과가 난다고 알고있습니다.
이 외에도 다른방법이 있다면 저도 꼭 알고싶네요..!
park780172 4년 전
단순히
오른쪽과 아래로만 가능 경우( (1,1)에서 (끝행, 끝열)로만 가는 경우 )를 제외하고,
일반적인 최단(최소) 거리 구할 때,
BFS 대신에 dp(다이나믹 프로그래밍)를 써도 되는지 궁금합니다.
어떤 점 (sy, sx)에서
상하좌우 모두 이동해야만 또는 상하좌우 중 적절히 활용하여 도달 할 수 있는 곳인 (ey, ex)로
도달하는 최단(최소) 거리 구하는 문제같은 경우
BFS 대신에 dp(다이나믹 프로그래밍)으로도
풀리는지 궁금합니다.