在C ++中检查二进制矩阵中的水平和垂直对称性

假设我们有一个M×N阶的二进制矩阵。任务是检查矩阵是水平对称的,垂直对称的还是两者都是。如果第i行与第(M – i)行相同,则称一个矩阵为水平对称,如果第j列与第(N – j)列相同,则称其为垂直对称。假设输入矩阵如下-

011
101
011

这是水平对称的。

111
101
111

这是垂直对称的。

111
101
111

这是水平对称和垂直对称的。

我们将分两个阶段解决此问题。首先,我们将检查矩阵是否是水平对称的,然后,设置一个布尔变量horizontal_flag = true,否则设置为false,如果矩阵是垂直对称的,则设置vartical_flag = true,否则设置为false。两者都是正确的,那么答案将是完全对称的。

示例

#include <iostream>

#define MAX 20

using namespace std;

void checkSymmetryLevel(int arr[][MAX], int N, int M) {

   bool horizontal_flag = true, vartical_flag = true;

   for (int i = 0, k = N - 1; i < N / 2; i++, k--) {

      for (int j = 0; j < M; j++) {

         if (arr[i][j] != arr[k][j]) {

            horizontal_flag = false;

            break;

         }

      }

   }

   for (int i = 0, k = M - 1; i < M / 2; i++, k--) {

      for (int j = 0; j < N; j++) {

         if (arr[i][j] != arr[k][j]) {

            vartical_flag = false;

            break;

         }

      }

   }

   if (!horizontal_flag && !vartical_flag)

      cout << "This is not symmetric from any point of view";

   else if (horizontal_flag && !vartical_flag)

      cout << "This is not horizontally symmetric";

   else if (vartical_flag && !horizontal_flag)

      cout << "This is vertically symmetric";

   else

   cout << "This is symmetric in both direction";

}

int main() {

   int mat[MAX][MAX] = {

   { 1, 1, 1 },

   { 1, 0, 1 },

   { 1, 1, 1 } };

   checkSymmetryLevel(mat, 3, 3);

}

输出结果

This is symmetric in both direction

以上是 在C ++中检查二进制矩阵中的水平和垂直对称性 的全部内容, 来源链接: utcz.com/z/338262.html

回到顶部