C++中给定二维数组中的最小和子矩阵
我们得到了一个由整数元素组成的二维数组,构成了矩阵。任务是通过从如此形成的矩阵中提取子矩阵来计算最小和的计数。
让我们看看这个的各种输入输出场景-
In−intmatrix[size][size]={{2,3,-1,5},{-2,9,-1,6},{5,6,9,-9},{-6,1,1,1}}
Out-给定二维数组中的最小和子矩阵为:-9
说明-我们给出了一个大小为4x4的二维数组,即4行和4列。现在,我们将从给定的矩阵中找出子矩阵,使得最小子矩阵为-9。
In−intmatrix[row][column]={{4,1,3},{-1,-1,-1},{6,2,3}}
Out-给定二维数组中的最小和子矩阵为:-3
说明-我们给出了一个大小为3x3的二维数组,即3行和3列。现在,我们将从给定矩阵中找出子矩阵,使得最小子矩阵为-3,这是通过给定矩阵中的第二行实现的,子矩阵的大小为1x3,即1行3列。
以下程序中使用的方法如下-
输入一个整数二维数组并将数据传递给函数Minimum_Matrix(matrix)以进行进一步处理。
函数内部Minimum_Matrix(matrix)
将临时变量声明为intresult=INT_MAX、intarr[row]、inttotal、intfirst和intend。
从int到temp开始循环FOR,直到temp小于列。在循环内将数组元素设置为0。从int到temp_2开始另一个循环FOR,直到temp_2小于column。在循环内部,从inti到0开始另一个循环,直到i小于row并将arr[i]设置为ar[i]+matrix[i][temo_2]。
将总计设置为对函数Algo_Kad(arr,&first,&end,row)的调用
检查IF总数小于结果,然后将结果设置为总数
打印结果作为最终输出。
在函数内部intAlgo_Kad(int*arr,int*first,int*end,intmax_size)
将临时变量声明为inttotal为0,intresult为INT_MAX,inttemp为0和*end=-1
从i到0开始循环FOR,直到i小于max_size。在循环内,将total设置为total+arr[i]。
检查IFtotal大于0,然后将total设置为0,将temp设置为i+1。
否则,如果检查总数小于结果,然后将结果设置为总数,*先到临时,*结束到i
现在,检查IF*end不等于-1然后返回结果。
将结果设置为arr[0],*first为0,*end为0
从i到1开始循环FOR,直到i小于max_size。在循环内,检查IFarr[i]小于结果,然后将结果设置为arr[i],*first为i和*end为i
返回结果。
示例
#include <bits/stdc++.h> using namespace std; #define row 4 #define column 4 int Algo_Kad(int* arr, int* first, int* end, int max_size) { int total = 0; int result = INT_MAX; int temp = 0; *end = -1; for(int i = 0; i < max_size; ++i) { total = total + arr[i]; if(total > 0) { total = 0; temp = i + 1; } else if(total < result) { result = total; *first = temp; *end = i; } } if(*end != -1) { return result; } result = arr[0]; *first = 0; *end = 0; for(int i = 1; i < max_size; i++) { if(arr[i] < result) { result = arr[i]; *first = i; *end = i; } } return result; } void Minimum_Matrix(int matrix[][column]) { int result = INT_MAX; int arr[row]; int total; int first; int end; for(int temp = 0; temp < column; ++temp) { memset(arr, 0, sizeof(arr)); for(int temp_2 = temp; temp_2 < column; ++temp_2) { for(int i = 0; i < row; ++i) { arr[i] = arr[i] + matrix[i][temp_2]; } total = Algo_Kad(arr, &first, &end, row); if(total < result) { result = total; } } } cout<<"给定二维数组中的最小和子矩阵为: "<<result; } int main() { int matrix[row][column] = {{2, 3, -1, 5}, {-2, 9, -1, 6}, { 5, 6, 9, -9}, { -6, 1, 1, 1} }; Minimum_Matrix(matrix); return 0; }输出结果
如果我们运行上面的代码,它将生成以下输出
给定二维数组中的最小和子矩阵为: -9