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
-
C++の正方形の外接円の面積
この問題では、正方形の辺が与えられたときに、正方形の外接円の面積を計算します。先に進む前に、概念をよりよく理解するために基本的な定義を修正しましょう。 正方形 はすべての辺が等しい四辺形です。 外接円 円はポリゴンのすべての頂点に接しています。 エリア は、任意の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