繁体   English   中英

2D数组,函数,C

[英]2d arrays, functions, C

问题是要编写一个函数,该函数采用2维数组,2个表示数组中行和列数的整数,并打印出2 X 2数组,该数组表示数组中最大的正方形。 最大的平方表示其元素之和在数组中最大的平方。

给定数组:1 2 3 4

5 6 7 8

9 10 11 12

输出应为:

7 8

11 12

尽管我们从未在课堂上学习过子阵列/矩阵和kadane算法,但我整天都在网上,我只是希望这在某种程度上接近解决方案? (*我的教授只对功能感兴趣,我们甚至不应该提交完整的程序)这是昨天到期的,但是我很迷茫,请您帮忙,谢谢!

/*Void f(x) that opens file to take in given array*/
void largestSqaure(int array[ROW][COLUMN])
{  

     FILE*ifp= fopen("largestSquare.txt", "r");
     FILE*ofp= fopen("output.txt", "w");
     for(R0W= 0; ROW < SIZE; ROW++)
              fscanf(ifp, "%d", &array[ROW]);

    /*Declaring variables*/
    int maxSum = INT_MIN, finalLeft, finalRight, finalTop, finalBottom;
    int left, right, i;
    int temp[ROW], sum, start, finish;

    /* Adding left and right columns & intiializing size in loop*/
    for (left = 0; left < COLUMN; ++left)
    {
        memset(temp, 0, sizeof(temp));

        for (right = left; right < COLUMN; ++right)
        {
            /* Calucalting sums for in between*/
            for (i = 0; i < ROW; ++i)
                temp[i] += array[i][right];

            /* Finding the max subarray using kadane*/
            sum = kadane(temp, &start, &finish, ROW);

            if (sum > maxSum)
            {
                maxSum = sum;
                finalLeft = left;
                finalRight = right;
                finalTop = start;
                finalBottom = finish;
            }
        }
    }

    /* Printing the 2 X 2 array that had max sum*/
    printf("%d, %d\n", finalTop, finalLeft);
    printf("d, %d\n", finalBottom, finalRight);

 system("pause");

}
#include <stdio.h>
#include <limits.h>

#define ROW    3
#define COLUMN 4

int main(void){
    int a[ROW][COLUMN] = {
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12}
    };
    int max = INT_MIN;
    int max_r, max_c;
    int r, c;
    for(r=0; r < ROW-1; ++r){
        for(c=0; c < COLUMN-1; ++c){
            int sum = a[r][c] + a[r][c+1] + a[r+1][c] + a[r+1][c+1];
            if(sum > max){
                max = sum;
                max_r = r;
                max_c = c;
            }
        }
    }
    printf("%d %d\n", a[max_r][max_c], a[max_r][max_c+1]);
    printf("%d %d\n", a[max_r+1][max_c], a[max_r+1][max_c+1]);
    return 0;
}

听起来您想要做的就是在nxm矩阵中找到2x2网格,这样您的网格就是矩阵中最大的2x2子网格。

因此,一种简单的方法是遍历nxm矩阵,检查所有2x2网格,并将最大网格存储在2x2答案数组中。

当n <2或m <2时,结果不确定。 当n = m = 2时,只有一个尺寸为2x2的子网格,因此您已找到它。 当n> 2或m> 2时,您的nxm矩阵中将有一些x的2x2数组。

for(i=0; i<n-1; i++){
    for(j=0;j<m-1;j++){
        //is matrix m[i][j] ... m[i+1][j+1] greater
        //than my previous maximal 2x2
        //sub grid? If so update.
    }
}

想法是检查nxm矩阵中的所有2x2子网格,如果发现较大的2x2网格,则更新当前最大的2x2网格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM