algorithm - 螺旋式循环

标签 algorithm matrix loops spiral

一位 friend 需要一种算法,让他循环遍历 NxM 矩阵的元素(N 和 M 是奇数)。我想出了一个解决方案,但我想看看我的 SO'ers 同事是否能想出更好的解决方案。

我发布了我的解决方案作为这个问题的答案。

示例输出:

对于 3x3 矩阵,输出应该是:

(0, 0) (1, 0) (1, 1) (0, 1) (-1, 1) (-1, 0) (-1, -1) (0, -1) (1, -1)

3x3 matrix

此外,该算法应支持非方阵,因此例如对于 5x3 矩阵,输出应为:

(0, 0) (1, 0) (1, 1) (0, 1) (-1, 1) (-1, 0) (-1, -1) (0, -1) (1, -1) (2, -1) (2, 0) (2, 1) (-2, 1) (-2, 0) (-2, -1)

5x3 matrix

最佳答案

这是我的解决方案(在 Python 中):

def spiral(X, Y):
    x = y = 0
    dx = 0
    dy = -1
    for i in range(max(X, Y)**2):
        if (-X/2 < x <= X/2) and (-Y/2 < y <= Y/2):
            print (x, y)
            # DO STUFF...
        if x == y or (x < 0 and x == -y) or (x > 0 and x == 1-y):
            dx, dy = -dy, dx
        x, y = x+dx, y+dy

关于algorithm - 螺旋式循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/398299/

相关文章:

c# - 获取集合的所有子集

java - 是否有任何有效和优化的方法来在 long[] 数组中存储 500M+ 元素?

matrix - 如何在 Octave 中输出矩阵?

c - 仅包含 "* "和 "SPACE "的输入随机矩阵

java - 在 Java while 循环条件中分配变量?

c# - 如何在 List<int> 中找到密集区域

c++ - 将 vector 拆分为唯一和重复 C++

python - 在 sympy 中查找特征值和特征向量返回空括号

IP地址和协议(protocol)的Python解析日志文件

python - 循环遍历 Names 并在 Name 中添加 1(如果已找到)