【问题标题】:Creating Array of Integers to store spaces in grid Java创建整数数组以在网格 Java 中存储空间
【发布时间】:2020-11-10 18:37:27
【问题描述】:

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

区域平面图位于网格上 - 所有房屋详细信息(尺寸等)均由用户输入。

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

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

可用空间不是网格上的空方格,而是与道路相邻的空方格。 (这条路可以横也可以竖)

网格:

Coords[][] grid;

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

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

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

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;
}

如何循环遍历网格中的所有道路方格,并创建一个包含道路上所有“间隙”大小的整数数组?

【问题讨论】:

    标签: java arrays optimization grid coordinates


    【解决方案1】:

    假设您的函数addNeighboursSquare() 将返回具有邻居坐标的数组(您必须初始化数组邻居)并且您可以检查单元格是否为空(那里还没有房子)我将从返回我的函数开始一个单元格周围的间隙:

    (伪代码):

    getGapsNumber(x, y):
        gapsNumber := 0
        neighbours := addNeighboursSquare(x,y)
        for neighbour in neighbours:
            if neighbour is empty
                gapsNumber++
        return gapsNumber
    

    然后只需遍历道路坐标并为它们调用getGapsNumber()

    (伪代码):

    totalGapsNumber := 0
    for cell in road:
        totalGapsNumber += getGapsNumber(cell.x, cell.y)
    return getGapsNumber
    

    如果您在一个地方没有道路坐标,请遍历整个网格并添加 if 语句,您可以在其中检查单元格是否是道路。

    (伪代码):

    totalGapsNumber := 0
    for cell in grid:
        if cell is road:
            totalGapsNumber += getGapsNumber(cell.x, cell.y)
    return getGapsNumber
    

    【讨论】:

    • 是的,addNeighboursSquare() 确实返回了一个坐标数组。但是,我不需要个别差距的总和。当房屋被放置在地图上的道路旁边时,这将根据我的优化算法放置房屋的位置创建空单元块。我需要一个包含道路上房屋之间每个间隙长度的数组,以查看是否可以添加更多房屋@wookieJ
    【解决方案2】:

    这个怎么样:

    1. 遍历房屋并获取房屋顶点(即道路)的所有邻居坐标。
    2. 验证相邻坐标的数量(2 表示房子只有一侧有道路,3 表示 2 条道路......)
    3. 遍历这条相邻的道路(检查道路是垂直的还是水平的)
    4. 左右或上下移动,直到出现下一个房屋或道路。检查此“房屋对”是否已保存,如果未保存则保存房屋对以避免重复并将距离添加到间隙大小数组。

    【讨论】:

    • 我很困惑。你能给我一些伪代码吗?这是否也检查从道路起点到第一所房子的距离,以及所有道路之后的间隙,即使道路没有接触?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多