【问题标题】:Neighbours algorithm邻居算法
【发布时间】:2020-06-21 20:33:44
【问题描述】:

您好,有这样的代码:

    for (int row = 0; row < a.length; row++) {
       for (int col = 0; col < a[row].length; col++) {
        // Do something with a[row][col];
    }
}

但我想为每个 a[row][col] 在网格(8 个邻居)中进行操作,但是当我在角落时我会遇到问题(我不知道如何检查我是否在一个角落),我在代码中思考了很多 if - 条件,但我不知道这样做的有效方法.. 如果有一种用于执行这种类型的遍历邻居数组的 perse 方法,如果你能给我一个链接,我会非常感激,我整天都在寻找信息,但我找不到任何东西。

【问题讨论】:

    标签: arrays algorithm multidimensional-array


    【解决方案1】:

    当您从给定位置查看邻居时,您可以使用这些表示索引变化的数组:

    int dx[] = {-1,0,1,1,1,0,-1,-1};
    int dy[] = {-1,-1,-1,0,1,1,1,0};
    

    在位置(row, col)dx[i] 表示row 的变化,dy[i] 表示col 的变化。您可以使用数组中的每个位置来查看邻居。

    创建一个检查位置是否安全的辅助函数:

    boolean isValidPosition(int x, int y) {
      return 0 <= x && x < a.length && 0 <= y && y < a[x].length;
    }
    

    然后遍历所有 8 个位置,您将可以通过 a[row + dx[i]][col + dy[i]] 访问邻居。

    for (int row = 0; row < a.length; row++) {
      for (int col = 0; col < a[row].length; col++) {
        for (int i = 0; i < 8; i++) {
          if (isValidPosition(row + dx[i], col + dy[i])) {
            // Do something with a[row + dx[i]][col + dy[i]];
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-27
      • 2015-09-14
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2011-10-07
      • 1970-01-01
      相关资源
      最近更新 更多