📌  相关文章
📜  用于检查二进制矩阵中水平和垂直对称性的 PHP 程序

📅  最后修改于: 2022-05-13 01:54:11.553000             🧑  作者: Mango

用于检查二进制矩阵中水平和垂直对称性的 PHP 程序

给定一个NM列的二维二进制矩阵。任务是检查矩阵是水平对称、垂直对称还是两者兼而有之。如果第一行与最后一行相同,则称该矩阵是水平对称的,第二行与倒数第二行相同,依此类推。如果第一列与最后一列相同,则称该矩阵是垂直对称的,第二列与倒数第二列相同,依此类推。如果矩阵是垂直对称的,则打印“VERTICAL”,如果矩阵是垂直对称的,则打印“HORIZONTAL”,如果矩阵是垂直和水平对称的,则打印“BOTH”,如果不是对称的,则打印“NO”。

例子:

Input: N = 3 M = 3
0 1 0
0 0 0
0 1 0
Output: Both
First and third row are same and also second row 
is in middle. So Horizontal Symmetric.
Similarly, First and third column are same and
also second column is in middle, so Vertical 
Symmetric.

Input:
0 0 1
1 1 0
0 0 1.
Output: Both 

这个想法是使用指示两行(或列)的指针并比较两个指向的行(或列)的每个单元格。
对于水平对称,初始化一个指针 i = 0 和另一个指针 j = N – 1。
现在,比较第 i 行和第 j 行的每个元素。在每个循环周期中将 i 增加 1 并将 j 减少 1。如果找到至少一个不相同的元素,则将该矩阵标记为非水平对称。
同样,对于垂直对称,初始化一个指针 i = 0 和另一个指针 j = M – 1。
现在,比较第 i 列和第 j 列的每个元素。在每个循环周期中将 i 增加 1 并将 j 减少 1。如果找到至少一个不同的元素,则将矩阵标记为非垂直对称。

下面是上述思想的实现:

PHP


输出:

BOTH

时间复杂度: O(N*M)。

有关详细信息,请参阅有关检查二进制矩阵中的水平和垂直对称性的完整文章!