给定一个大小为nxm的矩阵,我们如何计算大小为(L)的所有可能的平方矩阵的和

Given a matrix of size nxm, how can we calculate the sum of all possible square matrices of size (L)?

本文关键字:小为 计算 何计算 有可能 方矩阵 一个 nxm 我们      更新时间:2024-05-24

给定这个3x3(nxm(矩阵,我如何遍历并获得所有可能的平方子矩阵的和,即(在这种特殊情况下为1x1,2x2(

2 2 3
3 4 5
4 5 5

我知道这里,每个元素都是单独的子矩阵(1x1(,其余正方形子矩阵如下:

2 2
3 4
2 3
4 5
3 4
4 5
4 5
5 5

我尝试过我的方法,但多次失败,主要原因是我在编程中对矩阵感到困惑。我的方法:这里,'l'是正方形子矩阵的大小,'n'是主矩阵的行的大小,'m'是主阵的列的大小,

for (i=0; i<n-l; i++){
for (j=1; j<n-i+1; j++){
sum = 0;
for (p=i; p<l+i; p++){
for (q=1; q<l+j+1; q++){
sum += a[p][q];
}
}
cout << sum << endl;
}
l++;
}

这是您的案例的解决方案。

for(int i=0; i+(l-1)<n; i++){
for(int j=0; j+(l-1)<m; j++){
int sum = 0;
for(int a=0; a<l; a++){
for(int b=0; b<l; b++){
sum += matrix[i+a][j+b];
}
}
cout << sum << endl;
}
}

或者你可以尝试在Tio.run 上运行完整的代码

我重写了您的代码以使其正确,还做了完整的示例:

在线试用!

#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<std::vector<int>> a = {{2, 2, 3}, {3, 4, 5}, {4, 5, 5}};
size_t n = a.size(), m = a.size() > 0 ? a[0].size() : 0;

for (size_t l = 1; l <= std::min(n, m); ++l)
for (size_t i = 0; i < n - l + 1; ++i)
for (size_t j = 0; j < m - l + 1; ++j) {
int sum = 0;
for (size_t p = i; p < i + l; ++p)
for (size_t q = j; q < j + l; ++q)
sum += a[p][q];
std::cout << l << ", " << i << ", " << j << ": " << sum << std::endl;
}
}

输入:

2 2 3
3 4 5
4 5 5

输出:

1, 0, 0: 2
1, 0, 1: 2
1, 0, 2: 3
1, 1, 0: 3
1, 1, 1: 4
1, 1, 2: 5
1, 2, 0: 4
1, 2, 1: 5
1, 2, 2: 5
2, 0, 0: 11
2, 0, 1: 14
2, 1, 0: 16
2, 1, 1: 19
3, 0, 0: 33