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

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

説明 −出力は自明です

C++での行列の行方向と列方向のトラバーサル

入力

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

  1. C++でのZigZagツリートラバーサル

    この問題では、二分木が与えられます。私たちの仕事は、二分木をジグザグ形式で印刷することです。 問題を理解するために例を見てみましょう 上記の二分木のジグザグ走査は 3    5    1    8    7    0    4 この問題を解決するには、二分木をレベルごとにトラバースする必要があります。トラバーサルの順序は、各レベルの後で反転します。 ここで、2つのスタック(現在と次)と1つの値を注文に使用します。まず、ノードを現在のノードからトラバースし、ノード

  2. C++のスパイラルマトリックスIII

    R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[