【问题标题】:What is a good algorithm for traversing outward from a point on a 2D grid?从二维网格上的一点向外遍历的好算法是什么?
【发布时间】:2020-10-24 02:36:43
【问题描述】:

假设我有一个二维数组,其中 0,0 在左上角,底部是 100,100。我在该数组中有一个点,例如 10,10。我想对距此点 1 的每个元素进行测试,因此是一个 3x3 框。如果我所有的测试都失败了,我想再移出一个矩形环,所以现在它将是一个 5x5 的盒子。但我想提高效率,所以我不想再次测试 3x3 盒子,只测试新盒子。我想过可能有一个像 up 这样的起始向量,然后顺时针以蛇状模式移动,直到我回来,然后递增并再次这样做,但我不确定这是否是最好的。我也想过只从左到右扫描,但如果第 9,9 行已经找到答案,我不想扫描第 8,8 行。

一个网格看起来像这样,起点在中间

8,8   9,8   10,8   11,8   12,8
8,9   9,9   10,9   11,9   12,9
8,10  9,10  10,10  11,10  12,10
8,11  9,11  10,11  11,11  12,11
8,12  9,12  10,12  11,12  12,12

这只是针对我正在开发的一个爱好游戏的封面检查算法。在我的示例中,我已经在 10,10 找到了掩护来源。现在我只想搜索它周围的所有方块并测试玩家是否能看到我,如果没有,那么我已经在我的网格上找到了一个很好的隐藏位置。

【问题讨论】:

    标签: c++ arrays algorithm


    【解决方案1】:

    假设您从红色方块 (i,j) 开始,需要检查掩体。你需要做你所要求的。检查每个周围的矩形。

    从索引 (i-1, j-1) 开始。对绿色方块进行测试。 如果未找到,则从索引 (i-2, j-2) 开始。对蓝色方块进行测试。 如果未找到,则从索引 (i-3, j-3) 开始。对黄色方块进行测试。

    在某些情况下,您可能不得不选择 (i-1, j) 或 (i, j-1),而不是 (i-1, j-1)。

    这里的算法并不棘手,但实现却是。不要跨越矩阵边界。

    相关链接:

    1. Print a given matrix in spiral form
    2. Construct a matrix with numbers 1 to m*n in spiral way

    以上链接有向内螺旋。对于外向螺旋,你需要做同样的事情。

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2014-06-11
      • 1970-01-01
      • 2014-04-12
      相关资源
      最近更新 更多