Skip to content

Commit

Permalink
Added Minimum cost path algorithm and updated README
Browse files Browse the repository at this point in the history
  • Loading branch information
sayak119 committed Oct 4, 2017
1 parent faeb7a2 commit c13b6aa
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 0 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ Clean examples implementations of data structures and algorithms written in diff
* [k-means](cluster_analysis/k-means)
* [Dynamic Programming](dp)
* [kadane algorithm](dp/kadane-_algorithm)
* [knapsack algorithm](dp/knapsack_problem)
* [levenshtein distance](dp/levenshtein_distance)
* [minimum cost path](dp/min_cost_path)

## Contribution
* Contributions are always welcome. Language doesn't matter. Just make sure you're implementing an algorithm.
Expand Down
6 changes: 6 additions & 0 deletions dp/min_cost_path/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
### Minimum Cost Path algorithm

Given a cost matrix cost[][] and a position (m, n) in cost[][], write a function that returns cost of minimum cost path to reach (m, n) from (0, 0). Each cell of the matrix represents a cost to traverse through that cell. Total cost of a path to reach (m, n) is sum of all the costs on that path (including both source and destination). You can only traverse down, right and diagonally lower cells from a given cell, i.e., from a given cell (i, j), cells (i+1, j), (i, j+1) and (i+1, j+1) can be traversed. You may assume that all costs are positive integers.

#### A graphical example of Minimum Cost Path algorithm
![](min_cost_path.png)
54 changes: 54 additions & 0 deletions dp/min_cost_path/c++/min_cost_path.c++
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#include<stdio.h>
#include<limits.h>
#define R 3
#define C 3

int min(int x, int y, int z);

int minCost(int cost[R][C], int m, int n)
{
int i, j;

// Instead of following line, we can use int tc[m+1][n+1] or
// dynamically allocate memoery to save space. The following line is
// used to keep te program simple and make it working on all compilers.
int tc[R][C];

tc[0][0] = cost[0][0];

/* Initialize first column of total cost(tc) array */
for (i = 1; i <= m; i++)
tc[i][0] = tc[i-1][0] + cost[i][0];

/* Initialize first row of tc array */
for (j = 1; j <= n; j++)
tc[0][j] = tc[0][j-1] + cost[0][j];

/* Construct rest of the tc array */
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
tc[i][j] = min(tc[i-1][j-1],
tc[i-1][j],
tc[i][j-1]) + cost[i][j];

return tc[m][n];
}

/* A utility function that returns minimum of 3 integers */
int min(int x, int y, int z)
{
if (x < y)
return (x < z)? x : z;
else
return (y < z)? y : z;
}

// Test program
int main()
{
int cost[R][C] = { {1, 2, 3},
{4, 8, 2},
{1, 5, 3} };
printf(" %d ", minCost(cost, 2, 2));
return 0;
}
Binary file added dp/min_cost_path/min_cost_path.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit c13b6aa

Please sign in to comment.