我目前正在制定一个程序,优化房屋在网格上的布局,以获得最大利润。
区域平面图在网格上——所有房屋细节(尺寸等(都由用户输入。
所有房屋都必须放置在道路旁边——道路已经由用户添加到网格中。
我目前正在努力编写一个函数,检查网格是否还有任何可用空间来添加另一栋房子(我的优化算法的停止条件(。
可用空间不会是网格上的空广场,而是道路附近的空广场。(这条路既可以水平也可以垂直(
网格:
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年后发现了这个问题,但如果它仍然有效,我可能有一个解决方案:
- 构建图形:您的网格(地图(可能会转换为图形,其中节点包含坐标和类型(ROAD,GROUND(,边是相邻的坐标
- 发现AVAILABLE_SPACE节点:您现在可以使用DFS或BFS算法(对此问题进行了少量修改(遍历ROAD,并在支路上仍有空间的地方返回true,或者在需要时存储这些可用空间的大小和坐标。AVAILABLE_SPACE类型的节点将是GROUND型,并且位于ROAD节点的直接邻域中。发现AVAILABLE_SPACE节点后,可能需要再次遍历这些节点