algorithm - 以越来越小的螺旋线穿过方阵

标签 algorithm language-agnostic

我想要做的是一种算法,该算法以闭合螺旋模式通过矩阵,如下所示:

1 | 2 | 3
---------
8 | 9 | 4
---------
7 | 6 | 5

解决这个问题最简单的方法是什么?

我的想法:

  • 拐角或障碍物检测。
  • 有一个程序化的方式来垂直向下和反向。
  • 有一种方法可以检测元素是否已被访问。

P.S:不确定如何处理大小不是正方形或宽度为偶数的情况。

最佳答案

您不需要每个单元格的已访问概念,只需要一个变量来指示您有多远。

下面是一些(未经过广泛测试的)Java 代码来执行此操作。

它应该非常可读。

  // initialize
  int w = 5, h = 7;
  int[][] arr = new int[w][h];

  // do the work
  int count = 1;
  for (int i = 0; count <= w*h; i++)
  {
     // go right
     for (int x = i; x < w-i && count <= w*h; x++)
        arr[x][i] = count++;

     // go down
     for (int y = i+1; y < h-i && count <= w*h; y++)
        arr[w-i-1][y] = count++;

     // go left
     for (int x = w-2-i; x >= i && count <= w*h; x--)
        arr[x][h-i-1] = count++;

     // go up
     for (int y = h-2-i; y > i && count <= w*h; y--)
        arr[i][y] = count++;
  }

Java .

输出:

  1  2  3  4  5
 20 21 22 23  6
 19 32 33 24  7
 18 31 34 25  8
 17 30 35 26  9
 16 29 28 27 10
 15 14 13 12 11

关于algorithm - 以越来越小的螺旋线穿过方阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18215096/

相关文章:

algorithm - 需要帮助识别整数排序算法

javascript - 当我们可以抛出 TypeErrors 时,为什么我们需要 NaN 值?

language-agnostic - 从单词集中获取最可能的颜色

algorithm - 最长回文子序列(dp解法)

algorithm - 在放气算法中确定 block 大小的一些好的策略是什么?

algorithm - 使用什么算法来确定使系统进入 "Zero"状态所需的最少操作数?

language-agnostic - 你如何使数学方程可读和可维护?

language-agnostic - 什么时候方法应该是静态的?

javascript - 没有得到正确的二进制搜索算法

python - 使用动态规划查找 A 和 B 的最短交错字符串