-1

假设我想代表一个 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 行。

我发现了正方形之间的数学关系,但我无法使用它,因为有些正方形由于它们之间的墙而无法连接到它旁边的那些..

4

2 回答 2

1

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

为避免“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];
        }   
    }
于 2013-11-04T19:24:01.507 回答
0

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

于 2013-11-04T19:15:12.280 回答