[英]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.