gpt4 book ai didi

java - 添加小区邻居的最佳方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:30 25 4
gpt4 key购买 nike

我有一个网格,网格是 Cell 对象的二维数组。

public class Cell
{
int x;
int y;
ArrayList<Cell> nighbors=new ArrayList<Cell>();

public void addNeighbor(Cell cell)
{
this.neighbors.add(cell);
}
}

每个单元格有 8 个邻居:

enter image description here

还有一个,字段是循环的,如下图所示:

enter image description here

因此 Cell(0,1) 的邻居也是单元格 (5,0)、(5,1)、(5,2)。

现在我这样填充邻居:

public void addNeigbors(int x, int y)
{
Cell curentCell=grid[x][y];
if(x==0)
{
if(y==0)
{
curentCell.addNiegbor(this.cells[this.width-1][this.height-1]);
curentCell.addNiegbor(this.cells[x][this.height-1]);
curentCell.addNiegbor(this.cells[x+1][this.height-1]);
curentCell.addNiegbor(this.cells[x+1][y]);
curentCell.addNiegbor(this.cells[x+1][y+1]);
curentCell.addNiegbor(this.cells[x][y+1]);
curentCell.addNiegbor(this.cells[this.width-1][y+1]);
curentCell.addNiegbor(this.cells[this.width-1][y]);
}
else if(y==this.height-1)
{
// similar code
}
else
{
// and so on
}
}
// and so on
}

这段代码让我哭了,但我不知道如何让它变得更好。

你能给我什么建议?

最佳答案

在 Cell 中存储对每个邻居的引用是一种浪费。如果单元格需要访问它们的邻居,则在每个单元格中放置对 grid 数组的引用,并让单元格在必要时动态计算其邻居索引。

你可以添加这样的方法:

Cell getNeighbor(int dx, int dy)
{
int w = grid.length;
int h = grid[x].length;
return grid[(x+w+dx)%w][(y+h+dy)%h];
}

如果一个单元格需要遍历它所有的邻居,你可以这样做:

for (int dy=-1;dy<=1;++dy) {
for(int dx=-1;dx<=1;++dx) {
if (dx!=0 || dy!=0) {
processNeighbor(getNeighbor(dx,dy));
}
}
}

关于java - 添加小区邻居的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37391156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com