Minimum Cost Path

Moderate
0/80
Average time to solve is 25m
profile
Contributed by
32 upvotes
Asked in companies
Goldman SachsOlaSalesforce

Problem statement

You have been given a matrix of ‘N’ rows and ‘M’ columns filled up with integers. Find the minimum sum that can be obtained from a path which from cell (x,y) and ends at the top left corner (1,1).

From any cell in a row, we can move to the right, down or the down right diagonal cell. So from a particular cell (row, col), we can move to the following three cells:

Down: (row+1,col)
Right: (row, col+1)
Down right diagonal: (row+1, col+1)
Detailed explanation ( Input/output format, Notes, Images )
Input Format:
The first line will contain two integers ‘N’ and ‘M’ denoting the number of rows and columns, respectively.

Next ‘N’ lines contain ‘M’ space-separated integers each denoting the elements in the matrix.

The last line will contain two integers ‘x’ and ‘y’ denoting the cell to start from.
Output Format:
For each test case, print an integer that represents the minimum sum that can be obtained by traveling a path as described above.

Output for every test case will be printed in a separate line.
Note:
You don’t need to print anything; It has already been taken care of.
Constraints:
1 <= T <= 50
1 <= N, M <= 100
-10000 <= cost[i][j] <= 10000
1 <= x, y <= 100

Time limit: 1 sec
Sample Input 1:
3 4
3 4 1 2
2 1 8 9
4 7 8 1
2 3
Sample Output 1:
12
Explanation For sample input 1:
The minimum cost path will be (0, 0) -> (1, 1) -> (2, 3), So the path sum will be (3 + 1 + 8) = 12, which is the minimum of all possible paths.
Sample Input 2:
3 4
11 2 8 6 
2 12 17 6 
3 3 1 8 
3 4
Sample Output 2:
25
Hint

Think of trying all possible paths that can be taken from (1,1) to (X,Y). Can you implement this using recursion?

Approaches (3)
Recursive Approach

Let’s start from cell (X,Y). There are 3 possible cells from which we can come to (X,Y) (assuming they don’t violate the bounds of the array): cells (X-1, Y), (X, Y-1) and (X-1, Y-1). Now we find the minimum cost to reach these three cells. Here, we observe that this problem exhibits optimal substructure, i.e. this problem can be divided into smaller subproblems that do not overlap.

 

Create a recursive function minCost(int X, int Y), that computes the minimum cost it takes to reach cell (X,Y) from (1,1). The base case would be for cell (1,1) itself.

Time Complexity

O(3^(X*Y)), where X and Y are the coordinates of the destination cell.

 

There are X*Y cells to consider (we don’t consider the whole matrix), and from each cell we can move to 3 other cells.

Space Complexity

O(X + Y), where X and Y are the coordinates of the destination cell.

 

A record of all recursive calls is maintained in a recursion stack.

Code Solution
(100% EXP penalty)
Minimum Cost Path
Full screen
Console