2 u012138272 u012138272 于 2016.02.26 19:35 提问

C语言中关于矩阵算法的问题

从一个m×n的整数矩阵中,找到x×y的子矩阵,使子矩阵中所有元素的和最大,并输出和及子矩阵所有元素。算法实现的思路是怎么样的?

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.26 19:46
caozhy
caozhy   Ds   Rxr 2016.02.26 19:46
li980ex
li980ex   2016.02.26 21:16

给一种思路,把子矩阵看着一个滑动的窗口,进行遍历,计算和的时候计算滑动出去和新进来的数据的差。

mengyin521
mengyin521   2016.02.26 20:38

遍历M * N 的数组 中所有 X * Y矩阵集合 然后记录最大值,返回
给你写个 伪代码:
引用你的 m n x y 的值 架设 array为 你的二维数组
if(x <=0 || x> m || y <=0 || y>n) return;
int sum = 0;
int sumMax = 0; //记录最大值
int x_index = 0;//记录 X 坐标
int y_index = 0;//记录Y 坐标
int Pos_w = m - x + 1; //计算出 矩阵横向移动次数
int Pow_h = m - y + 1;//计算出 矩阵竖向移动次数
for(int i= 0 ;i< Pos_w *Pow_h; ++i)
{
sum = 0; //清空
//获取该子矩阵的和
for(int j = 0; j < x * y; ++j)
{
sum += array[j / x + i / Pos_w, j % x + i%Pos_w];
}
if (sum > sumMax)
{
x_index = i % Pos_w;
y_index = i / Pos_w;
sumMax = sum;
}
}
你只要 用 x_index 和 y_index 就可以了 记住 这个 坐标 记录的是 你所需要的子矩阵中 左上角的坐标 从 0,0开始。
Y 代表 矩阵中的第几行 X 代表 第几列。 我在写运算的时候 已经把 二维转换成 一维了,优化代码的作用。
如果不理解的话 可以在问我 你直接套用即可。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言中矩阵定义问题
C语言在进行矩阵运算的时候可以按照下边来定义 typedef struct Matrix {  double **p;  int rows;  int cols; } Matrix; 向量可以定义成下式 typedef struct Vector {  double *p;     int len; } Vector; 这样可以包括所有维数的向量和矩阵。 要在初始化的时
c语言版数据结构课件(严蔚敏)
关于c语言中的一些重要的算法的模拟与演示
栈的应用 - 符号平衡问题
在编程语言中,经常需要判断一些符号是否成对出现,比如<>、()、[]、{},在C++中通常也只有这些对称问题。当然,还有引号的匹配、注释符号的匹配等,在匹配过程中还可能出现转义字符的问题。简便起见,在此只考虑四种括号的匹配问题,并且不考虑转义字符。   借助于栈,可以很方便的判定一个字符串是否是符号平衡的,具体地,从左至右扫描字符串,如果是左括号,则直接入栈,如果是右括号,则栈顶元素退栈,并且将该元
C语言中使用穷举法的一些算法
C语言中使用穷举法的一些算法C语言中使用穷举法的一些算法
C语言中关于插入法排序的源代码
C语言中关于插入法排序的源代码; C语言中关于插入法排序的源代码。
C语言中数据类型间的转换问题和注意事项
1、自动转换:  高       double    ←←    float        ↑         ↑                     ↑        long             ↑         ↑        ↑        unsigned        ↑          ↑        低        int      ←←   ch
我的C语言矩阵库01
这里实现的矩阵库是将矩阵都分配在栈内存中的,这使得我在进行较大量的矩阵运算时将栈给撑爆了,所以更好的办法是使用malloc动态分配内存,改进的矩阵库点击这里。 以下是原文。由于要在stm32上实现矩阵运算,所以结合网上代码实现了一个C语言矩阵库,进行一些矩阵的基本运算,包括:转置,加减,乘法,求逆,拼接等,测试环境是MDK5。先给出下载地址:点击这里。 首先是头文件math_matrix.h:#
C语言中enum与typedef enum的用法
在了解enum和typedef enum的区别之前先应该明白typedef的用法和意义。 C语言里typedef的解释是用来声明新的类型名来代替已有的类姓名。 例如: typedef int CHANGE;指定了用CHANGE代表int类型,CHANGE代表int,那么:int a,b;和CHANGE a,b;是等价的、一样的。方便了个人习惯,熟悉的人用CHANGE来定义int。 typede
C语言中的基本算法
C语言中的基本算法 素数 最大公约数和最小公倍数 等级 闰年 N! fib数列素数(素数的求解过程运用到了for循环)1.1判断一个数是不是素数 #include <stdio.h> #include <windows.h> #include <string.h> #include <math.h>
数据结构(C语言版) 清华大学出版社 第五章数组和广义表 例题答案
主要讲述了C语言中矩阵的压缩存储和广义表的递归算法。