我有一个大的瓷砖网格,我想在特定区域选择一堆瓷砖。瓷砖的选择将从黑色瓷砖开始。
我拍了一张照片来说明我想要的瓷砖。我唯一拥有的是中心瓷砖。正如您在图片中看到的那样,从中心到边界瓷砖的距离是曼哈顿距离。
这是对算法需要的解释。中心瓷砖和距离。
std::vector<Tile*> getTilesInArea(Tile *centerTile, int distance)
{
// Do calculation and return a vector with the wanted tiles
}
请注意。距离是瓷砖。正如您在图像上看到的那样,距离为10(距离中心区域每个方向10个方块)。
谢谢大家。
答案 0 :(得分:0)
假设每个区块都有指向它的邻居,上,下,右,左,这里是伪代码的基本思想。
getTilesInArea(centerTile, distance):
returnVector <- {}
l = centerTile
r = centerTile
for (i = 0; i < distance; i++)
l = l.left
r = r.right
traverseUpDown(returnVector, l, distance-i)
traverseUpDown(returnVector, r, distance-i)
return returnVector
traverseUpDown(vector, tile, count):
vector.add(tile)
u = tile
d = tile
for (i=0; i<count; i++)
u = u.up
d = d.down
vector.add(u)
vector.add(d)