该程序旨在接收整数的方阵,并输出最大的子方阵和。
输入的第一行是一个整数,表示方矩阵的尺寸,然后是实际的矩阵。 我的程序似乎仅在出于某些原因使用1时起作用,并且当我尝试包含否定值时,该程序给出了完全错误的答案。
示例输入1:
3
1 2 3
4 5 6
7 8 9
输出:45
Input2示例:
3
1 2 3
4 5 6
-7 -8 -9
输出:16
注意:由于最大的方矩阵是[2 3; 5 6]总计为16我的代码:
#include <bits/stdc++.h>
#define bool int
using namespace std;
void printMaxSubSquare(bool M[10][10], int n)
{
int i,j;
int S[n][n];
int max_of_s, max_i, max_j;
// Set first column of S[][]
for(i = 0; i < n; i++)
S[i][0] = M[i][0];
// Set first row of S[][]
for(j = 0; j < n; j++)
S[0][j] = M[0][j];
// Construct other entries of S[][]
for(i = 1; i < n; i++)
{
for(j = 1; j < n; j++)
{
if(M[i][j] > -1 ){
S[i][j] = min(S[i][j-1],min( S[i-1][j],
S[i-1][j-1])) + 1;
}
else
S[i][j] = 0;
}
}
// Find the maximum entry, and indexes of maximum entry in S[][]
max_of_s = S[0][0];
max_i = 0;
max_j = 0;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(max_of_s < S[i][j])
{
max_of_s = S[i][j];
max_i = i;
max_j = j;
}
if(S[i][j]<0){
S[i][j] = 0;
max_i = 0;
max_j = 0;
}
}
}
int sum = 0;
for(i = max_i; i > max_i - max_of_s; i--)
{
for(j = max_j; j > max_j - max_of_s; j--)
{
sum = sum + M[i][j];
cout << M[i][j] << " ";
}
cout << "\n";
}
cout<<sum;
}
int main()
{
int n = 0;
cin>>n;
bool M[10][10];
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
cin>>M[i][j];
}
}
cout<<endl;
printMaxSubSquare(M,n);
}
答案 0 :(得分:0)
您将M声明为bool,因此在执行cin >> M [i] [j]时会破坏您想要的内容。哦,我看到您写了#define bool int ...这不是犹太洁食 参见https://en.cppreference.com/w/cpp/keyword