首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态更新Array的元素(基于对其其他元素的更改)

动态更新Array的元素(基于对其其他元素的更改)
EN

Stack Overflow用户
提问于 2017-04-12 06:32:53
回答 1查看 43关注 0票数 0

所以,我在一个表面上有一个二维裂纹向量,没有特殊的排列顺序。如果一个裂缝太近,另一个裂缝(假设3个单位),其中一个或两个裂缝必须被转换(最大数量8个单位)。B型裂缝(已识别)将不被修改。到目前为止,我的程序已经具备了将裂缝沿或垂直于它们的方程线的功能。

当我把一个裂缝从另一个裂缝中移开时,问题就出现了,它离另一个裂缝太近了,第三个裂缝。这需要第二次翻译,如果问题没有解决,第三次也需要翻译。但这会引起计算上的紧张。如果在第一次迭代中移动了278个裂纹,然后在第二个和第三个迭代中又移动了278个裂纹,那么在转换之前,已经有277^3 = 21,253,933个计算(对于每个裂缝,必须计算到277个其他裂纹的距离)。现在并不是所有的278个裂缝都必须被翻译,但是我需要一个更好的算法来移动所有的裂缝,使它们至少有3个单位的距离。即使我尝试使用动态搜索邻里,它仍然需要循环所有278裂缝。

请告诉我,我被困住了,我真的不知道该怎么做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-12 07:16:20

可以使用以下结构作为表面块

代码语言:javascript
复制
struct Square{
bool occupied;
Square *crack;
};

然后,你可以用以下方法来标记任何有裂缝的方格:

代码语言:javascript
复制
surf[x][y].occupied = true;

此外,您还可以在裂缝周围创建一个“区域”,其中充满了

代码语言:javascript
复制
surf[x][y]->crack 

即指向导致其不可用的裂纹的指针(如果为空,则为NULL )

因此,当您开始游戏时,您可以开始为每个裂缝构建领土,直到冲突发生(领土已经被占领),在这种情况下,您可以将裂缝移开(不要忘记移动它的领土)。因此,您只需检查裂缝是否在另一个裂缝的范围内,如果是的话,您应该移动它(只需搜索周围的空方块)。如果成功地移动到一个空方块(或超过移动限制),您现在可以创建它自己的领土。如果在构建该区域时,您已经遇到了一个带有领土的正方形,只需使用指针来移动它(以及它的领土)。这将有助于您不需要比较每一个裂缝与所有其他,并使这个过程更有效率。另外,如果您不想移动一个裂缝不止一次,您可以跟踪它是否已被移动使用另一个布尔值,您可以确定最佳方向。只是想了一下。希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43361993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档