从数据结构角度看,方阵是二维数组。
从数学角度看,方阵中的元素可看作函数 f(i, j) 的值。
解决这类问题通常有两种方法:
- 一种是模拟法,按照自然数(或符号)递增(或递减)排列的顺序控制下标,逐一填入自然数(或符号)。
- 另一种是归纳法(或函数法),通过归纳类比来发现方阵排列的规律,找出方阵中元素与下标的对应关系,建立函数。
模拟法与归纳法各有优劣。为了方便阐述,我们约定 f(i, j) 表示方阵中的 (i, j) 元。
首先,可以归纳出一些N阶方阵的基本变化规律:
- 垂直对称 f’(i, j) = f(i, n+1-j)
- 水平对称 f’(i, j) = f(n+1- i, j)
- 对角线对称 (主对角线) f’(i, j) = f(j, i)
- 对角线对称 (辅对角线) f’(i, j) = f(n+1-i, n+1-i);
将以上基本变化合并后,可以产生其他对称旋转等变化。例如:
- 中心对称:将水平变化和垂直变化合并,f’(i, j) = f(n+1-i, n+1-j)
- 顺时针旋转90度:将水平对称和对角线对称合并,f’(i, j) = f(n+1-j, i)
- 逆时针旋转90度:将垂直对称和对角线对称合并,f’(i, j) = f(j, n+1-i)