2012-09-05 136 views
0

1.我有一个二维数组,代表一个矩阵。我需要找到总和最大的平方子矩阵。子矩阵的大小是除以2。例如行或列的数目,如果我有此查找最大总和子矩阵

9 3 5 9 
2 5 9 8 
8 4 9 7 
9 5 3 9 

最大子矩阵将是

9 8 
9 7 

,因为它具有最大总和。


2.其次,我需要找到最大的子矩阵排列。我的意思是,我需要选择具有子矩阵形状的最大数字(在同一列或同一行中至少有两个数字)。例如,四个九对角线边缘

9 9 
9 9 

,但我不能拿第一行,并作出矩阵,因为它确实有基体的形状。

我仍然在努力,所以请帮助我。

这里是我的代码和SUBM是子矩阵

for (i=0;i<rows-subm;i++){ 
      for(j=0;j<colums-subm;j++) 
      { 
      temp=pic[i][j]+pic[i][j+1]+pic[i+1][j]+pic[i+1][j+1]; 
      if(temp > summax) 
       summax=temp; 
      } 
} 
+1

[你有什么尝试?](http://whathaveyoutried.com) – Keppil

+1

用毛绒动物说出来。你知道什么?你需要什么来解决这个问题?最重要的是,你有什么代码可以保证你找到子矩阵的最大值?我认为9 8 9 7将是最大的子矩阵。 – Makoto

+0

对于零件#1,您需要查找所有可能的子矩阵。您可以选择递归或查找动态编程。这是标准问题。 – Nishant

回答

1

使用矩阵行列式的计算方法的大小。看看这个example。一个2×2矩阵的行列式将被计算为

AB

CD

ad-cb 

Instead use a+b+c+d 

result = mat[0][0] + mat[1][1] + mat[0][1] + mat[1][0]; 

记录所有这些值替换的2x2矩阵计算的例子,找出最大从他们

+0

谢谢大家。我很欣赏它。 – Sam