가장 왼쪽 열 0th
부터 시작하여 positive
정수의 행렬이 주어지면 가장 오른쪽 열 (n - 1)th
의 최소 경로를 찾으십시오. 예 :
동적 프로그래밍을 사용하여 지형지도 최단 경로를 해결하는 방법은 무엇입니까?
최소 경로는 1을 포함하는 경로입니다.
임의의 정사각형 m[i, j]
에서 4 방향 (left, right, up, down
)으로 이동할 수 있습니다. 물론 가장 왼쪽, 가장 오른쪽 행/열의 모든 코너 케이스를 제외하고. 예를 들어 [0, 0]
일 경우 right
또는 down
만 이동할 수 있습니다.
내 솔루션은 m x n
버텍스의 그래프를 작성한 후 Floyd-Warshall을 실행하여 두 개의 버텍스의 모든 쌍 최단 경로를 계산합니다. (u, v)
. 그런 다음 다른 중첩 된 for
루프를 실행하여 열의 모든 정점이있는 0th
열의 모든 정점을 검사하여 최소 경로를 찾습니다.
하지만, 내 교수는 다음과 재발을 사용하여 다른 알고리즘을 제안 : 나는 그것이 어떻게 작동하는지 단서가 없다
S[i, j, L] =
min(
S[i - 1, j, L - 1] + cost[i - 1, j],
S[i + 1, j, L - 1] + cost[i + 1, j],
S[i, j - 1, L - 1] + cost[i, j - 1],
S[i, j + 1, L - 1] + cost[i, j + 1]);
을! 어떤 정사각형이라도 [i, j]
에서 우리는 4 방향으로 이동할 수 있기 때문에 이전에 계산 된 값을 기반으로 테이블을 만들 수 없습니다.
여기에 뭔가 빠졌습니까? 이 재발이 어떻게 작동하는지 나는 볼 수 없다. 어떤 생각?
교수님은 1) S가 행렬의 가장자리를 지나서 계산 될 필요가 없으며 (2) S [0,0,0] = 0이라는 점을 잊어 버린 것 같습니다. – Beta
... P. 나는 이것이 당신이 요구하는 것이 아니라는 것을 알고 있지만 이것은 반복적 인 (재귀적인) 반복적 인 BFS를 요구합니다. – Beta
'S [i, j, 0] = 무한대'S [0,0,0] = 0'을 제외하고는 작동 할 것입니다. 결국 모든 S [i, j, k] == S [i, j, k + 1] 반복을 멈출 수 있습니다. S [i, j, k]는 (0,0)에서 (i, j)까지의 최단 경로 비용을 갖는다. –