C++程序检查矩阵的所有行是否彼此循环旋转


本文旨在实现一个C++程序,用于检查矩阵的所有行是否彼此循环旋转。以下是关于矩阵的简要概述。

以行和列组织的符号或数字的矩形数组称为矩阵。矩阵可以有多种不同的类型,包括行矩阵、列矩阵、水平矩阵、垂直矩阵、方阵、对角矩阵、单位矩阵、相等矩阵和奇异矩阵。加法、减法和乘法是三种基本的矩阵运算。

目标是确定大小为n*n的矩阵的所有行是否彼此循环旋转。

示例1

Let us take the Input matrix :
m[][] = 9, 8, 7
        7, 9, 8
        7, 8, 9
The Output obtained is : Yes

说明 − 这里每一行都是通过彼此的排列旋转得到的。

示例2

Let us take the Input matrix : 
m[][] = 9, 8, 7
        7, 9, 8
        7, 8, 9
The Output obtained is : No

说明 − 在这里您可以观察到7,8,9不是7,9,8的旋转排列。因此结果为“否”。

示例3

Let us take the Input matrix:
m[][] =  3, 4, 5
         5, 3, 4
         4, 5, 3
The Output obtained is : Yes

说明 − 这里每一行都是通过彼此的排列旋转得到的。

示例4

Let us take the Input matrix:
m[][] =  3, 4, 5
         4, 3, 5
         5, 4, 3
The Output obtained is : No

说明 − 在这里您可以观察到4,3,5不是3,4,5的旋转排列。因此结果为“否”。

问题陈述

实现一个C++程序来检查矩阵的所有行是否彼此循环旋转

方法

解决此问题并获得C++程序以检查矩阵的所有行是否彼此循环旋转的方法。我们执行以下步骤。

为了确保能够有效地执行字符串搜索操作,创建一个由第一行的元素组成的字符串,然后将该字符串自身连接起来。请将此连接后的字符串称为concatenatedStr。

现在遍历其余的行。对于遍历的每一行,创建一个名为currStr的字符串,其中包含当前行的元素。如果当前字符串(即currStr)不是连接字符串(即concatenatedStr)的子字符串,则返回false。

算法

实现C++程序以检查矩阵的所有行是否彼此循环旋转的算法如下所示:

  • 步骤1 − 定义一个函数,如果大小为n的矩阵m[0..n-1][0..n-1]中的所有行都是彼此的旋转,则该函数返回true。

  • 步骤2 − 定义一个用第一行的元素生成的字符串。

  • 步骤3 − 接下来,将字符串自身连接起来,以便将其用于子字符串搜索操作。

  • 步骤4 − 现在遍历剩下的行

  • 步骤5 − 将矩阵组织成向量中的字符串。

  • 步骤6 − 验证当前字符串是否包含在连接字符串中。

  • 步骤7 − 返回“是”或“否”作为结果。

示例:C++程序

以下是上述算法的C++程序实现,以获得一个C++程序来检查矩阵的所有行是否彼此循环旋转

#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000;

bool isPermutationMat(int m[MAX][MAX], int n){
   string concatenatedStr = "";
   for (int i = 0; i < n; i++)
      concatenatedStr = concatenatedStr + "-" + to_string(m[0][i]);
   concatenatedStr = concatenatedStr + concatenatedStr;
   for (int i = 1; i < n; i++) {
      string currStr = "";
      for (int j = 0; j < n; j++)
         currStr = currStr + "-" + to_string(m[i][j]);
      if (concatenatedStr.find(currStr) == string::npos)
         return false;
   }
   return true;
}
int main(){
   int n = 4;
   int m[MAX][MAX] = {{5, 6, 7, 8},
      {8, 5, 6, 7},
      {7, 8, 5, 6},
      {8, 7, 4, 5}
   };
   isPermutationMat(m, n) ? cout << "Yes" : cout << "No";
   return 0;
}

输出

No

结论

同样,我们可以使用C++程序来检查矩阵的所有行是否彼此循环旋转。本文解决了获得C++程序以检查矩阵的所有行是否彼此循环旋转的挑战。

这里提供了C++编程代码以及实现C++程序以检查矩阵的所有行是否彼此循环旋转的方法和算法。

更新于: 2023年10月30日

60次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告