与えられた行列をC++で反時計回りのスパイラル形式で印刷します
この問題では、2次元の行列が与えられます。そして、私たちのタスクは、から反時計回りのスパイラルで行列の要素を印刷することです。
反時計回りのスパイラルフォーム −これは、左上から始まり、反時計回りに最初の右下から左上に向かって進むスパイラルトラバーサルです。
反時計回りのトラバーサルは159 13 14 15 16 12 8 4 3 2 6 10117になります。
問題を理解するために例を見てみましょう
Input: 2 4 6 1 7 9 5 0 3 Output: 2 1 5 0 3 9 7
この問題を解決するために、4つのループを使用し、それぞれを一方向に使用して、それらの方向を初期化し、それに応じてトラバースします。
例
ソリューションの実装を示すプログラム
#include <bits/stdc++.h>
using namespace std;
#define R 3
#define C 3
void printCounterClockwiseSpiral(int m, int n, int matrix[R][C]){
int i, k = 0, l = 0;
int count = 0;
int total = m * n;
while (k < m && l < n){
if (count == total)
break;
for (i = k; i < m; ++i){
cout<<matrix[i][l]<<" ";
count++;
}
l++;
if (count == total)
break;
for (i = l; i < n; ++i){
cout<<matrix[m - 1][i]<<" ";
count++;
}
m--;
if (count == total)
break;
if (k < m){
for (i = m - 1; i >= k; --i){
cout<<matrix[i][n - 1]<<" ";
count++;
}
n--;
}
if (count == total)
break;
if (l < n){
for (i = n - 1; i >= l; --i){
cout<<matrix[k][i]<<" ";
count++;
}
k++;
}
}
}
int main() {
int mat[R][C] = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9}
};
cout<<"Conter Clockwise Spiral from of the matrix is :\n";
printCounterClockwiseSpiral(R, C, mat);
return 0;
} 出力
1 4 7 8 9 6 3 2 5
-
与えられた行列がC++でテプリッツであるかどうかを調べます
この問題では、サイズn*nの2D正方行列mat[][]が与えられます。私たちの仕事は、与えられた行列がテプリッツであるかどうかを見つけることです。 テプリッツ行列 対角行列とも呼ばれ、対角の要素が左上隅から右下隅に向かって始まる行列です。 問題を理解するために例を見てみましょう 入力: Mat [] [] ={{3、5、1}、 {4、3、2}、 {1、2、3}} 出力: はい 説明: 対角線:(0、0)、(1、1)、(2、2)の値は同じ3です。 ソリューションアプローチ: この問題を解決する簡単な方法は、対角インデックスですべての要素をチェックすることです。これらの
-
C++のスパイラルマトリックスIII
R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[