假设我想代表一个有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旁边,因为他们之间的墙..
我看不出有什么不对您发布的节点类。它使遍历非常容易。我猜可能很难填充。取决于一个节点是否需要知道它的邻居是谁。我真的没有看到你认为你通过添加ID属性而不是使用对象引用获得了什么。 – tom
我不喜欢400指针的想法。此外,我仍然必须做100行,但它看起来像这样'grid.getEntry(2).setNeighbors(grid.getEntry(1),grid.getEntry(3),null,null);' – Lamia
“400指针的想法”远远好于创建400个ID(本质上是指针)并自己管理它们,这是您提出的替代方案。您可以将地板放在一个二维节点阵列中,在每个节点中创建一个干净的节点,然后遍历指定左/右/上/下节点的数组。不需要100行代码。 – tom