C++中三维数组的最小路径和
我们得到一个立方体,可以用三维数组表示为cube[length][breadth][height]。任务是计算遍历立方体所能达到的最小路径和,并打印结果。
让我们看看这个的各种输入输出场景 -
输入 − int cube[length][breadth][height] = { { {2, 4, 1}, {3, 4, 5}, {9, 8, 7}}, { {5, 3, 2}, {7, 6, 5}, {8, 7, 6}}, { {3, 2, 1}, {4, 3, 2}, {5, 4, 3}}}
输出 − 三维数组的最小路径和为:15
解释 − 我们得到一个具有长度、宽度和高度的立方体。现在,我们将计算三维数组中的最小路径和。所以,它将从 2 + 4 + 1 + 3 + 5 即 15 开始。
输入 − int cube[length][breadth][height] = { { {1, 2}, {7, 8}}, { {3, 5}, {9, 16}}}
输出 − 三维数组的最小路径和为:24
解释 − 我们得到一个具有长度、宽度和高度的立方体。现在,我们将计算三维数组中的最小路径和。所以,它将从 1 + 2 + 5 + 16 即 24 开始。
下面程序中使用的方法如下
输入一个三维数组来形成一个具有整数值的立方体。将数据作为 Minimum_SubPath(cube) 传递给函数。
在函数 Minimum_SubPath(cube) 内部
创建一个与立方体大小相同的数组,并将 arr[0][0][0] 初始化为 cube[0][0][0]。
从 i=1 开始循环到立方体的长度,并将 arr[i][0][0] 设置为 arr[i-1][0][0] + cube[i][0][0]。
从 j=1 开始循环到立方体的宽度,并将 arr[0][j][0] 设置为 arr[0][j-1][0] + cube[0][j][0]
从 k=1 开始循环到立方体的高度,并将 arr[0][0][k] 设置为 arr[0][0][k-1] + cube[0][0][k]
从 i=1 开始循环到立方体的长度,再从 j=1 开始循环到数组的宽度,并将 min_val 设置为 Minimum(arr[i-1][j][0], arr[i][j-1][0], INT_MAX),并将 arr[i][j][0] 设置为 min_val + cube[i][j][0]
从 i=1 开始循环到立方体的长度,再从 k=1 开始循环到数组的高度,并将 min_val 设置为 Minimum(arr[i-1][0][k], arr[i][0][k-1], INT_MAX),并将 arr[i][0][k] = min_val + cube[i][0][k]
从 k=1 开始循环到立方体的高度,再从 j=1 开始循环到数组的宽度,并将 min_val 设置为 Minimum(arr[0][j][k-1], arr[0][j-1][k], INT_MAX),并将 arr[0][j][k] = min_val + cube[0][j][k]
从 i=1 开始循环到立方体的长度,再从 j=1 开始循环到数组的宽度,再从 k=1 开始循环到立方体的高度,并将 min_val 设置为 Minimum(arr[i-1][j][k], arr[i][j-1][k], arr[i][j][k-1]),并将 arr[i][j][k] = min_val + cube[i][j][k]
返回 arr[length-1][breadth-1][height-1]
在函数 Minimum(int a, int b, int c) 内部
检查 IF a 小于 b 且 a 小于 c,则返回 a。
否则,返回 c
否则 IF,b 小于 c,则返回 b
否则,返回 c
示例
#include<bits/stdc++.h>
using namespace std;
#define length 3
#define breadth 3
#define height 3
int Minimum(int a, int b, int c){
if(a < b){
if(a < c){
return a;
}
else{
return c;
}
}
else if(b < c){
return b;
}
else{
return c;
}
}
int Minimum_SubPath(int cube[][breadth][height]){
int i, j, k;
int arr[length][breadth][height];
arr[0][0][0] = cube[0][0][0];
for(i = 1; i < length; i++){
arr[i][0][0] = arr[i-1][0][0] + cube[i][0][0];
}
for(j = 1; j < breadth; j++){
arr[0][j][0] = arr[0][j-1][0] + cube[0][j][0];
}
for(k = 1; k < height; k++){
arr[0][0][k] = arr[0][0][k-1] + cube[0][0][k];
}
for(i = 1; i < length; i++){
for(j = 1; j < breadth; j++){
int min_val = Minimum(arr[i-1][j][0], arr[i][j-1][0], INT_MAX);
arr[i][j][0] = min_val + cube[i][j][0];
}
}
for(i = 1; i < length; i++){
for(k = 1; k < height; k++){
int min_val = Minimum(arr[i-1][0][k], arr[i][0][k-1], INT_MAX);
arr[i][0][k] = min_val + cube[i][0][k];
}
}
for(k = 1; k < height; k++){
for(j = 1; j < breadth; j++){
int min_val = Minimum(arr[0][j][k-1], arr[0][j-1][k], INT_MAX);
arr[0][j][k] = min_val + cube[0][j][k];
}
}
for(i = 1; i < length; i++){
for(j = 1; j < breadth; j++){
for(k = 1; k < height; k++){
int min_val = Minimum(arr[i-1][j][k], arr[i][j-1][k], arr[i][j][k-1]);
arr[i][j][k] = min_val + cube[i][j][k];
}
}
}
return arr[length-1][breadth-1][height-1];
}
int main(){
int cube[length][breadth][height] = { { {2, 4, 1}, {3, 4, 5}, {9, 8, 7}},
{ {5, 3, 2}, {7, 6, 5}, {8, 7, 6}},
{ {3, 2, 1}, {4, 3, 2}, {5, 4, 3}}};
cout<<"Minimum Sum Path In 3-D Array are: "<<Minimum_SubPath(cube);
return 0;
}输出
如果我们运行上述代码,它将生成以下输出
Minimum Sum Path In 3-D Array are: 15
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP