forked from ZoranPandovski/al-go-rithms
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added Minimum cost path algorithm and updated README
- Loading branch information
Showing
4 changed files
with
63 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.