C++程序 检查二进制矩阵的水平和垂直对称性
给定一个由 N 行和 M 列组成的二进制二维矩阵。任务是要检查矩阵是否具有水平对称性、垂直对称性或两者都具备。当第一行与最后一行相同,第二行与倒数第二行相同,依此类推时,该矩阵被认为具有水平对称性。当第一列与最后一列相同,第二列与倒数第二列相同,依此类推时,该矩阵被认为具有垂直对称性。如果矩阵垂直对称,则输出“VERTICAL”,如果矩阵水平对称,则输出“HORIZONTAL”,如果矩阵既具有垂直对称性又具有水平对称性,则输出“BOTH”,如果不对称,则输出“NO”。
举例
输入:N = 3 M = 3
0 1 0
0 0 0
0 1 0
输出:Both
第一行和第三行相同,第二行处于中间。因此具有水平对称性。
类似地,第一列和第三列相同,并且第二列处于中间,因此具有垂直对称性。
输入:
0 0 1
1 1 0
0 0 1.
输出:Both
思路是使用指向两个行(列)的指针,并比较所指向的行(列)的每个单元格。
水平对称: 初始化一个指针i=0,另一个指针j=N-1。
现在,每个循环周期中比较i-th行和j-th行的每个元素。每次将i增加1,j减少1。如果发现至少有一个不相同的元素,则标记矩阵为不具有水平对称性。
类似地,对于垂直对称性,初始化一个指针i=0,另一个指针j=M-1。
现在,比较i-th列和j-th列的每个元素。每次将i增加1,j减少1。如果发现至少有一个不相同的元素,则标记矩阵为不具有垂直对称性。
下面是上述思想的实现:
输出
时间复杂度 O(N*M).
辅助空间 : O(1),因为它对变量使用了常量空间。