不完全确定我的要求是正确的,所以让我重申一下:
您想要一个高效的算法来遍历 nxn 矩阵的所有元素,其中 n 大约为 10,它从给定元素 (i,j) 开始并按与 (i,j) 的距离排序!?
我会循环通过距离变量 d 从 0 到 n/2 然后对于 d 的每个值循环 l 到 -(2*d) 到 +(2*d)-1 选择单元格 (i+d, j +l),如果 i>=0 还为每个单元格选择 (i+l,jd),(i+l, j+d),您必须应用模 n,将负索引映射回矩阵。
这认为矩阵基本上是一个圆环,将上下边缘以及左右边缘粘合在一起。
如果你不喜欢这样,你可以让 d 运行到 n ,而不是模运算,只是忽略矩阵之外的值。
These aproaches give you the fields directly in the correct order. For small fields I do doubt any kind of optimization on this level has much of an effect in most situations, Nicholas approach might be just as good.
Update
I slightly modified the cells to pick in order to honor the rule 'only consider fields that are right from the current column or on the same column'