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