다른 비용의 매트릭스가 제공됩니다. 또한 대상 셀이 제공됩니다. 시작 셀(0, 0)에서 목적지 셀에 도달하기 위한 최소 비용 경로를 찾아야 합니다.
행렬의 각 셀은 해당 셀을 통과하는 비용을 나타냅니다.
셀에서 우리는 아무데도 이동할 수 없으며 목적지에 도달하기 위해 오른쪽이나 아래쪽 또는 오른쪽 아래 대각선 셀로 이동할 수 있습니다.
입력 및 출력
Input: The cost matrix. And the destination point. In this case the destination point is (2, 2). 1 2 3 4 8 2 1 5 3 Output: The minimum cost to reach to the destination from (0, 0). The minimum cost is 8.
알고리즘
minCostPath(destX, destY, cost)
입력 - 목적지의 (x, y) 장소 및 비용 매트릭스.
출력 - 목적지에 도달하기 위한 최소 비용입니다.
Begin define matrix totalCost, whose order is same as cost matrix totalCost[0, 0] = cost[0, 0] for i := 1 to destX, do totalCost[i, 0] := totalCost[i-1, 0] + cost[i, 0] done for j := 1 to destY, do totalCost[0, j] := totalCost[0, j-1] + cost[0, j] done for all places (i, j) from (1, 1) to (destX, destY), do totalCost[i, j] := minimum of totalCost[i-1, j-1], totalCost[i-1, j] and (totalCost[i, j-1] + cost[i,j]) done return totalCost[destX, destY] End
예
#include<iostream> #define ROW 3 #define COL 3 using namespace std; int cost[ROW][COL] = { {1, 2, 3}, {4, 8, 2}, {1, 5, 3} }; int min(int a, int b, int c) { return (a<b)?((a<c)?a:c):((b<c)?b:c); } int minCostPath(int destX, int destY) { int totalCost[ROW][COL]; totalCost[0][0] = cost[0][0]; for (int i = 1; i <= destX; i++) totalCost[i][0] = totalCost[i-1][0] + cost[i][0]; //set first col of totalCost array for (int j = 1; j <= destY; j++) //set first row of totalCost array totalCost[0][j] = totalCost[0][j-1] + cost[0][j]; for (int i = 1; i <= destX; i++) //for second row and column to all for (int j = 1; j <= destY; j++) totalCost[i][j] = min(totalCost[i-1][j-1], totalCost[i- 1][j], totalCost[i][j-1]) + cost[i][j]; return totalCost[destX][destY]; } int main() { cout << "Minimum Cost: "<< minCostPath(2, 2); //destination (2, 2) return 0; }
출력
Minimum Cost: 8