0

我很难在大矩阵 M 和 m=M/2 中找到一些最小的子矩阵 m;

我需要在同一循环中找到子矩阵的数量以找到最小的子矩阵
这是我所做的。

public static void FindSmalSubMatrix(int mat3[][],int rows,int colums)
{
    int subm,i,j,temp=0,location1=0,location2=0, min=0;
    ArrayList submin = new ArrayList();
    if(rows>=colums)
      subm=colums/2;
    else
      subm= rows/2;
    min= Firstmin(mat3,subm);

    for (i=0;i<rows-subm+1;i++)
      for(j=0;j<colums-subm+1;j++)
      {
          for(int k=i; k <i+subm;k++)
              for (int l =j;l<j+subm;l++)
              {

                 temp=temp+ mat3[k][l];
              }

           if (temp <= min)
           {
               min=temp;
              submin.add(min);

              location1=i;
              location2=j;
           }

           temp=0;
      }
    System.out.println(min+" location is :"+location1+" "+location2);
    for( Object value:submin)
      System.out.print(value); 
}

这是一个例子

6 6 4 4 3
2 2 3 3 8
5 0 2 2 5
4 9 2 1 4
1 6 8 1 3
7 位置是:2 2

161514977

但我需要打印 min =7 Location :1 1
2 3
0 2

最小 =7
位置:2 2
2 2
1 2

如果有人可以帮助我,我将不胜感激。

4

1 回答 1

0

你的代码没那么糟糕。您是否尝试调试它并检查保存到 submin 的内容?因为它看起来像 16,15,14,9,7,7(最后 2 个数字很好,不是吗?)什么是 FirstMin?

public static void FindSmalSubMatrix(int mat3[][],int rows,int colums)
{
    int subm,i,j,temp=0,location1=0,location2=0, min=0;
    ArrayList<Point> locations = new ArrayList<Point>();
    if(rows>=colums)
      subm=colums/2;
    else
      subm= rows/2;
    min= Integer.MAX_VALUE;

    for (i=0;i<rows-subm+1;i++)
      for(j=0;j<colums-subm+1;j++)
      {
       temp = 0;
          for(int k=i; k <i+subm;k++)
              for (int l =j;l<j+subm;l++)
              {

                 temp=temp+ mat3[k][l];
              }

           if (temp < min)
           {
              locations.clear();  //you dont need data about larger min, right?
               min=temp;

              Point point = new Point(i,j);
              locations.add(point);

           } else (temp == min) {
              Point point = new Point(i,j);
              locations.add(point);

           }

      }
    // And to print use something like these, but its better to create new class
    // which contain location and small matrixes or just use old bigger to print parts
    // for example just print location (min are equal to all result) and using   
    // location print parts from  mat3

}

我想我在这个例子中犯了一些错误,但你会发现它;)我使用 Point 类只是为了保存最小矩阵的位置,你可以使用另一个类

编辑: 我不得不稍微修复它,因为我的代码很难看(但无论如何......)

于 2012-09-18T07:06:44.030 回答