C++での行列の行方向と列方向のトラバーサル
マトリックスは2つの方法でトラバースできます。行マイズトラバーサルは、最初の行から2番目、というように最後の行まで、各行を1つずつ訪問します。行の要素は、インデックス0から最後のインデックスまで返されます。
列ごとのトラバーサルでは、要素は最初の列から最後の列に順番にトラバースされます。
2DマトリックスではM[i][j]。インデックスiは行を表すために使用され、インデックスjは列を表すために使用されます。行ごとのトラバーサルの場合は、
から開始します。i=0行目および0<=j<最後のインデックス
i=1行目および0<=j<最後のインデックス
.....
i=最後の行と0<=j<最後のインデックス
列ごとのトラバーサルの場合は、
から開始します。j=0番目の列と0<=i<最後のインデックス
j=1番目の列と0<=i<最後のインデックス
.....
j=最後の列と0<=i<最後のインデックス
インデックスの順序は、2D配列M [i] [j]-iは行、jは列
で同じです。例
入力 −
int arr[MAX][MAX] = { {1,2,3,4,5},{6,7,8,9,0}, {5,4,3,2,1},{0,0,0,0,0}, {8,9,7,6,1}};
出力 −
Row Major Traversal 1 2 3 4 5 6 7 8 9 0 5 4 3 2 1 0 0 0 0 0 8 9 7 6 1 Column Major Traversal 1 6 5 0 8 2 7 4 0 9 3 8 3 0 7 4 9 2 0 6 5 0 1 0 1
説明 −出力は自明です
入力 −
int arr[MAX][MAX] = { {1,1,1,1,1},{2,2,2,2,2}, {3,3,3,3,3},{4,4,4,4,4}, {5,5,5,5,5}};
出力 −
Row Major Traversal 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 Column Major Traversal 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
説明 −出力は自明です。
以下のプログラムで使用されているアプローチは次のとおりです
このアプローチでは、2つのforループを使用して、入力2D行列を行方向と列方向のトラバーサルで印刷します。
-
2D行列を表すために入力配列arr[][]を取ります。
-
変数iとjを行要素と列要素のインデックスとして使用します。
-
行ごとのトラバーサルの場合、インデックスi =0からi
-
その中で、i番目の行のすべての要素をトラバースするために、j=0からj
-
arr [i] [j]
を印刷します -
列ごとのトラバーサルの場合、インデックスj =0からj
-
その中で、j番目の列のすべての要素をトラバースするために、i=0からi
-
arr[i][j]を印刷します。
例
#include <bits/stdc++.h> using namespace std; #define MAX 5 int main(){ int arr[MAX][MAX] = { {1,2,3,4,5},{6,7,8,9,0},{5,4,3,2,1},{0,0,0,0,0},{8,9,7,6,1}}; int i, j; cout<<"Row Major Traversal "<<endl; for(i=0;i<MAX;i++){ cout<<endl; for(j=0;j<MAX;j++){ cout<<" "<<arr[i][j]; } } cout<<endl<<endl; cout<<"Column Major Traversal "<<endl; for(j=0;j<MAX;j++){ cout<<endl; for(j=0;j<MAX;j++){ cout<<" "<<arr[j][i]; } } return 0; }
出力
上記のコードを実行すると、次の出力が生成されます
Row Major Traversal 1 2 3 4 5 6 7 8 9 0 5 4 3 2 1 0 0 0 0 0 8 9 7 6 1 Column Major Traversal 6 5 0 8 3 2 7 6 4
-
C++でのZigZagツリートラバーサル
この問題では、二分木が与えられます。私たちの仕事は、二分木をジグザグ形式で印刷することです。 問題を理解するために例を見てみましょう 上記の二分木のジグザグ走査は 3 5 1 8 7 0 4 この問題を解決するには、二分木をレベルごとにトラバースする必要があります。トラバーサルの順序は、各レベルの後で反転します。 ここで、2つのスタック(現在と次)と1つの値を注文に使用します。まず、ノードを現在のノードからトラバースし、ノード
-
C++のスパイラルマトリックスIII
R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[