Given a 3-D array arr[l][m][n], the task is to find the minimum path sum from the first cell of array to the last cell of array. We can only traverse to adjacent element, i.e., from a given cell (i, j, k), cells (i+1, j, k), (i, j+1, k) and (i, j, k+1) can be traversed, diagonal traversing is not allowed, We may assume that all costs are positive integers.
public class solution {
public int minPathSum(int arr[][][]) {
int l = arr.length, m = arr[0].length, n = arr[0][0].length;
int dp[][][] = new int[l][m][n];
// Base case
dp[0][0][0] = arr[0][0][0];
// Building row edge
for (int i = 1; i < l; i++)
dp[i][0][0] = dp[i - 1][0][0] + arr[i][0][0];
// Building column edge
for (int j = 1; j < m; j++)
dp[0][j][0] = dp[0][j - 1][0] + arr[0][j][0];
// Building height edge
for (int k = 1; k < n; k++)
dp[0][0][k] = dp[0][0][k - 1] + arr[0][0][k];
// Building row-col area
for (int i = 1; i < l; i++)
for (int j = 1; j < m; j++)
dp[i][j][0] = Math.min(dp[i - 1][j][0], dp[i][j - 1][0]) + arr[i][j][0];
// Building row-height area
for (int i = 1; i < l; i++)
for (int k = 1; k < n; k++)
dp[i][0][k] = Math.min(dp[i - 1][0][k], dp[i][0][k - 1]) + arr[i][0][k];
// Building col-height area
for (int k = 1; k < n; k++)
for (int j = 1; j < m; j++)
dp[0][j][k] = Math.min(dp[0][j][k - 1], dp[0][j - 1][k]) + arr[0][j][k];
// Building rest of the 3d cube
for (int i = 1; i < l; i++)
for (int j = 1; j < m; j++)
for (int k = 1; k < n; k++)
dp[i][j][k] = Math.min(dp[i - 1][j][k], Math.min(dp[i][j - 1][k], dp[i][j][k - 1])) + arr[i][j][k];
return dp[l - 1][m - 1][n - 1];
}
}