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

C++でマトリックス内のパターンの方向を検索します


この問題では、パターンを構成する文字値で構成される行列が与えられ、検出されるパターンも与えられます。私たちのタスクは、マトリックス内のパターンの方向(水平または垂直)を見つけることです。

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

入力

mat[][] = {
   { r, a, m },
   {a, m, c},
   {w, f, t}
}
Patern : raw

出力

vertical

ソリューションアプローチ

この問題の簡単な解決策は、行列のN行すべてでMサイズのパターンを検索することです。この解決策は問題ありませんが、問題に対するより効果的な解決策は、行列のすべての行と列にKMLパターンマッチングアルゴリズムを使用することです。

ソリューションの動作を説明するプログラム

#include<bits/stdc++.h>
using namespace std;
#define N 3
void calcLpsValues(char *pat, int M, int *lps) {
   int len = 0;
   int i = 1;
   lps[0] = 0;
   while (i < M) {
      if (pat[i] == pat[len]) {
         len++;
         lps[i++] = len;
      } else {
         if (len != 0)
            len = lps[len - 1];
         else
            lps[i++] = 0;
      }
   }
}
int searchPattern(char *pat, char *txt) {
   int M = strlen(pat);
   int *lps = (int *)malloc(sizeof(int)*M);
   int j = 0;
   calcLpsValues(pat, M, lps);
   int i = 0;
   while (i < N) {
      if (pat[j] == txt[i]) {
         j++;
         i++;
      }
      if (j == M)
         return 1;
      else if (i < N && pat[j] != txt[i]) {
         if (j != 0)
            j = lps[j - 1];
         else
            i = i + 1;
      }
   }
   return 0;
}
void findPatternOrientation(char mat[][N], char *pat) {
   char *col = (char*) malloc(N);
   for (int i = 0; i < N; i++) {
      if (searchPattern(pat, mat[i])) {
         cout<<"horizontal";
         return;
      }
      for (int j = 0; j < N; j++)
         col[j] = *(mat[j] + i);
      if (searchPattern(pat, col))
         cout<<"vertical";
   }
}
int main() {
   char mat[N][N] = {{'r', 'a', 'm'},
   {'a', 'm', 'c'},
   {'w', 'f', 't'}};
   char pattern[] = "raw";
   cout<<"The orientation of the pattern in matrix is ";
   findPatternOrientation(mat, pattern);
   return 0;
}

出力

The orientation of the pattern in matrix is vertical

  1. グラフ行列の転置を見つけるためのC++プログラム

    このプログラムでは、行列を取得し、行列の転置を出力します。転置行列では、行は列になり、その逆も同様です。 アルゴリズム Begin Take number of rows and columns of the matrix. Take The elements of the matrix and stored in the matrix ‘A’. The transpose matrix is found by exchanging the rows with columns and columns with rows. Print both t

  2. 行列の転置を見つけるためのC++プログラム

    行列は、行と列の形式で配置された数値の長方形の配列です。行列の転置は、元の行が現在の列である新しい行列であり、その逆も同様です。たとえば。 マトリックスは以下のとおりです- 1 2 3 4 5 6 7 8 9 上記の行列の転置は次のとおりです。 1 4 7 2 5 8 3 6 9 行列の転置を見つけるプログラムは次のとおりです- 例 #include<iostream< using namespace std; int main() {    int transpose[10][10], r=3, c=2, i, j;    int a