创建整数数组以在网格Java中存储空间



我目前正在制定一个程序,优化房屋在网格上的布局,以获得最大利润。

区域平面图在网格上——所有房屋细节(尺寸等(都由用户输入。

所有房屋都必须放置在道路旁边——道路已经由用户添加到网格中。

我目前正在努力编写一个函数,检查网格是否还有任何可用空间来添加另一栋房子(我的优化算法的停止条件(。

可用空间不会是网格上的空广场,而是道路附近的空广场。(这条路既可以水平也可以垂直(

网格:

Coords[][] grid;

如果网格上的坐标是道路:

grid[x][y].getRoad() == true

以下函数查找任何坐标的所有相邻正方形:(cols-网格中的列数((行-网格中的行数(

public static Coords[] addNeighboursSquare(Coords coord, int x, int y, int cols, int rows)
{
Coords[] neighbours = null;
//right
if (x < cols - 1)
{
neighbours[0] = AStarAlgorithm.grid[x + 1][y];
}
//left
if (x > 0)
{
neighbours[1] = AStarAlgorithm.grid[x - 1][y];
}
//top
if (y < rows - 1)
{
neighbours[2] = AStarAlgorithm.grid[x][y + 1];
}
//bottom
if (y > 0)
{
neighbours[3] = AStarAlgorithm.grid[x][y - 1];
}
return neighbours;
}

如何循环穿过网格中的所有道路方格,并创建一个包含道路上所有"间隙"大小的int数组?

我在将近3年后发现了这个问题,但如果它仍然有效,我可能有一个解决方案:

  1. 构建图形:您的网格(地图(可能会转换为图形,其中节点包含坐标和类型(ROADGROUND(,边是相邻的坐标
  2. 发现AVAILABLE_SPACE节点:您现在可以使用DFSBFS算法(对此问题进行了少量修改(遍历ROAD,并在支路上仍有空间的地方返回true,或者在需要时存储这些可用空间的大小和坐标。AVAILABLE_SPACE类型的节点将是GROUND型,并且位于ROAD节点的直接邻域中。发现AVAILABLE_SPACE节点后,可能需要再次遍历这些节点

最新更新