找到bool数组中最大矩形的坐标

时间:2015-03-28 15:49:52

标签: arrays boolean coordinates

我有问题。 假设我们有一个1和0的矩阵,我们想要找到它中包含1的最大矩形。下面的代码执行此操作并计算区域并将其存储在变量“res”中。我的问题是,如何在该矩阵中找到该矩形的坐标?我的意思是X,Y,H,W。其中X,Y是起始坐标和H,W(高度,宽度)是矩形的大小。我有点迷茫。谢谢你的回复。

       int maximalRectangle(vector<vector<char> > &matrix) 
   {
        int row = matrix.size();
        if (row==0){return 0;}
        int col = matrix[0].size();
        int res=0;
        vector<vector<int>> ones(row,vector<int>(col,0));

        for (int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if (matrix[i][j]=='1'){ 
                    if (j==0){ones[i][j]=1;}
                    else{ones[i][j]=ones[i][j-1]+1;}
                }
            }
        }

        for (int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if (ones[i][j]!=0){ 
                    int h = i-1;
                    int tmp=ones[i][j];
                    int mini=ones[i][j];
                    while (h>=0){
                        if (ones[h][j]==0){
                            break;
                        }else{
                            if (ones[h][j]<mini){
                                mini = ones[h][j];
                            }
                            if (tmp< mini*(i-h+1)){
                                tmp= mini*(i-h+1);
                            }
                            h--;
                        }
                    }
                    if (res<tmp){
                        res=tmp;
                    }
                }
            }
        }

        return res;
    }

0 个答案:

没有答案