C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の最大正方形


0と1で満たされた2Dバイナリ行列があるとします。 1だけを含む最大の正方形を見つけて、その面積を返す必要があります。したがって、行列が-

のような場合
1 0 1 0 0
1 0 1 1 0
1 1 1 1 1
1 0 0 1 0

その場合、出力は4になります

これを解決するには、次の手順に従います-

  • ans:=0、n:=行数、c:=行数

  • nが0の場合、0を返します

  • 次数(n x c)の別の行列を作成します

  • 0からn–1の範囲のiの場合

    • 0からc–1の範囲のjの場合

      • m [i、j]:=matrix [i、j]

      • ans:=最大m [i、j]およびans

  • 0からc–1の範囲のjの場合

    • m [i、j]が0でない場合、

      • m [i、j]:=1+最小m[i+ 1、j]、m [i、j-1]、m [i + 1、j-1]、

    • ans:=最大m [i、j]およびans

  • ans*ansを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maximalSquare(vector<vector<char>>& matrix) {
      int ans = 0;
      int n = matrix.size();
      if(!n)return 0;
      int c = matrix[0].size();
      vector<vector<int>> m(n, vector <int> (c));
      for(int i =0;i<n;i++){
         for(int j = 0; j<c;j++){
            m[i][j] = matrix[i][j] - '0';
            ans = max(m[i][j],ans);
         }
      }
      for(int i =n-2;i>=0;i--){
         for(int j =1;j<c;j++){
            if(m[i][j]){
               m[i][j] = 1 + min({m[i+1][j],m[i][j-1],m[i+1][j-1]});
            }
            ans = max(ans,m[i][j]);
         }
      }
      return ans*ans;
   }
};
main(){
   vector<vector<char>> v = {{'1','0','1','0','0'},{'1','0','1','1','1'},{'1','1','1','1','1'},         {'1','0','0','1','0'}};
   Solution ob;
   cout << ((ob.maximalSquare(v)));
}

入力

[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]

出力

4

  1. C++の正方形の外接円の面積

    この問題では、正方形の辺が与えられたときに、正方形の外接円の面積を計算します。先に進む前に、概念をよりよく理解するために基本的な定義を修正しましょう。 正方形 はすべての辺が等しい四辺形です。 外接円 円はポリゴンのすべての頂点に接しています。 エリア は、任意の2次元図形の範囲を定量的に表したものです。 正方形の外接円の面積を計算します。円と正方形のパラメータの関係を見つける必要があります。 これで、図のように、正方形のすべての頂点が円に接触しています。この図を見ると、正方形の対角線は円の直径に等しいと結論付けることができます。 これを使用して、円の直径と正方形の辺の関係を

  2. C++でのAreaOfSquareのプログラム

    長方形の辺が与えられ、その辺から正方形の領域を印刷することがタスクです。 正方形は、4つの辺を持ち、それぞれ90度の4つの角度を形成し、すべての辺が同じ形状の2D平面図形です。言い換えれば、正方形は辺が等しい長方形の形であると言えます。 以下に示すのは正方形の表現です- 正方形の面積はSidexSide 例 Input: 6 Output: 36 As the side is 6 so the output is 6*6=36 Input: 12 Output: 144 アルゴリズム START    Step 1-> Declare a functio