将网格正方形连接在一起的最有效方法是什么?



>假设我想代表一个有 100 层的 10*10 房间。我可以从任何楼层开始,穿过房间,但是,有些楼层之间有墙壁。

CS说,我正在尝试制作一个10 * 10的网格房间,每个正方形代表一个地板。每个楼层都有一定的特征,它可以表示为一个节点,整个网格,但包含这些节点的列表。

我试图将每个方块链接到与之相关的方块。这种关系可以描述如下:-每个方块的顶部,右侧,向上,向下都有另一个,除了网格边缘的那些。

例如,位于网格左上角的第一层仅与其右侧的地板及其下方的地板相关。

-此外,假设某些楼层之间有一个块,则无法连接在一起。楼层号上一个示例中的一个无法与其下面的一个链接,因为它们之间有一堵墙。

我使用指针将每个节点(正方形或楼层)链接到其相关节点:

public class Node{
private Node right;
private Node left;
private Node up;
private Node down;
//constructor other methods  
}

但是,这个解决方案可能会占用内存中的许多位置,假设我们有 100 个节点,每个节点有 4 个指针!

我通过为每个节点分配 ID 来更改此解决方案,然后在每个节点中都有一个 int[] 数组,我可以在其中存储相关节点的数量。

这个解决方案在网格类中引入了另一个问题!假设更改后,Node 类中的新方法是:

public void setNeighbors(int[] neighbors ) { this.neighbors = neighbors; }

在网格类中,当我想创建每个节点以将其添加到列表中时,我必须编写 100 行,每个节点一个!

int [] n1 ={2}; grid.getEntry(1).setNeighbors(n1);
int [] n2 ={1,3}; grid.getEntry(2).setChars(n2 );
.
.
.
And so on.. 

我的问题是,我如何通过制作尽可能高效和干净的代码来解决问题。

我如何表示正方形之间的静态关系,而不必在每一步都创建一个数组,也不必写 100 行。

我发现了正方形之间的

数学关系,但我无法使用它,因为有些正方形无法链接到旁边的onse,因为它们之间的墙壁。

我认为在尝试减少少量内存之前,您应该专注于获取工作代码。 这称为过早优化

为了避免"100 行问题",您可以初始化一个楼层,执行以下操作(未经测试):

    Node[][] floor = new Node[10][10];
    for (int i=0;i<10;i++){
        for (int j=0;i<10;i++){
            floor[i][j] = new Node();
        }   
    }
    for (int i=0;i<10;i++){
        for (int j=0;j<10;j++){
            if (i<9)
                floor[i][j].down = floor[i+1][j];
            if (i>1)
                floor[i][j].up = floor[i-1][j];
            if (j<9)
                floor[i][j].right = floor[i][j+1];
            if (j>1)
                floor[i][j].up = floor[i][j-1];
        }   
    }

您可以计算曼哈顿距离而不是尤克利德距离。

最新更新