为什么我最大的子平方矩阵和程序不能与负数一起使用?

时间:2019-10-16 20:36:30

标签: c++

该程序旨在接收整数的方阵,并输出最大的子方阵和。

输入的第一行是一个整数,表示方矩阵的尺寸,然后是实际的矩阵。 我的程序似乎仅在出于某些原因使用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);
}

1 个答案:

答案 0 :(得分:0)

您将M声明为bool,因此在执行cin >> M [i] [j]时会破坏您想要的内容。哦,我看到您写了#define bool int ...这不是犹太洁食 参见https://en.cppreference.com/w/cpp/keyword