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

C++のポイントから始まるスパイラル形式で行列を印刷します


この問題では、2次元行列と点P(c、r)です。私たちのタスクは、行列のすべての要素を、指定された点Pから始まるスパイラル形式(反時計回り)で印刷することです。

私たちの問題を理解するために例を見てみましょう

Input: matrix[][] = {{3, 5, 7} }
Output:

この問題を解決するために、要素の印刷に4つのループを使用します。各ループは、独自の方向の要素を出力します。ポイントpから印刷を開始し、スパイラルフォームの印刷を続行します。

ソリューションの実装を示すプログラム

#include <iostream>
using namespace std;
const int MAX = 100;
void printSpiralMatrix(int mat[][MAX], int r, int c) {
   int i, a = 0, b = 2;
   int low_row = (0 > a) ? 0 : a;
   int low_column = (0 > b) ? 0 : b - 1;
   int high_row = ((a + 1) >= r) ? r - 1 : a + 1;
   int high_column = ((b + 1) >= c) ? c - 1 : b + 1;
   while ((low_row > 0 - r && low_column > 0 - c)) {
      for (i = low_column + 1; i <= high_column && i < c && low_row >= 0; ++i)
         cout<<mat[low_row][i]<<" ";
      low_row -= 1;
      for (i = low_row + 2; i <= high_row && i < r && high_column < c; ++i)
         cout<<mat[i][high_column]<<" ";
      high_column += 1;
      for (i = high_column - 2; i >= low_column && i >= 0 && high_row < r; --i)
         cout << mat[high_row][i]<<" ";
      high_row += 1;
      for (i = high_row - 2; i > low_row && i >= 0 && low_column >= 0; --i)
         cout<<mat[i][low_column]<<" ";
      low_column -= 1;
   }
   cout << endl;
}
int main() {
   int mat[][MAX] = {
      { 1, 4, 7 },
      { 2, 5, 8 },
      { 3, 6, 9 }
   };
   int r = 3, c = 3;
   cout<<"Sprial traversal of matrix starting from point "<<r<<", "<<c<<" is :\n";
   printSpiralMatrix(mat, r, c);
}

出力

ポイント3、3から始まる行列の探索探索は、-

です。
7 8 5 4 9 6 3 2 1

  1. 与えられた行列を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 この問

  2. 特定のソースから宛先までのすべてのパスをC++で出力します

    この問題では、有向グラフが与えられ、グラフのソースから宛先までのすべてのパスを印刷する必要があります。 有向グラフ は、頂点aからbに向けられたエッジを持つグラフです。 問題を理解するために例を見てみましょう ソース=K宛先=P 出力: K -> T -> Y -> A -> P K -> T -> Y -> P K -> A -> P ここで、KからPへのパスを見つけました。パスをトラバースし、KからPに向かうすべてのパスを出力しました。 この問題を解決するために、深さ優先探索を使用してグラフをトラバースします。