假设我想代表一个 10*10 的房间,它有 100 个楼层。我可以从任何楼层开始穿过房间,但是,有些楼层之间有墙壁。
CS 说,我正在尝试制作一个 10*10 网格 - 房间 - 每个正方形代表一个楼层。每个楼层都有一定的特征,它可以表示为一个节点,整个网格,但是包含这些节点的列表。
我试图将每个方格与与之相关的方格联系起来。这种关系可以描述如下: - 每个正方形在顶部、右侧、向上、向下都有另一个正方形,除了网格边缘的正方形。
例如,位于网格左上角的一楼仅与其右侧的楼层及其下方的楼层相关。
-此外,假设它们之间有一个街区,某些楼层无法连接在一起。楼层号 上一个示例中的一个不能与它下面的一个链接,因为它们之间有一堵墙。
我使用指针将每个节点 -square 或 floor- 链接到其相关节点:
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 行。
我发现了正方形之间的数学关系,但我无法使用它,因为有些正方形由于它们之间的墙而无法连接到它旁边的那些..