首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于检查某一点是否相邻的算法的问题

关于检查某一点是否相邻的算法的问题
EN

Stack Overflow用户
提问于 2016-05-09 18:42:51
回答 1查看 229关注 0票数 3

作为我正在进行的一个项目的一部分,我想把含有水的瓷砖分成“海”和“湖”。要做到这一点,首先要在地图的边缘找到所有的水瓦片,并将它们指定为“海”瓷砖。与海瓦相邻的所有水瓦(没有对角线)也都是海砖。其他所有的水瓷砖都是“湖”瓷砖。

我的方法寻找第一个海瓷砖(在板的边缘)是没有缺陷的。然而,我寻找其他海砖的方法往往忽略了应该是海的巨大的矩形区域。代码如下:(seed是一个布尔数组,true是陆地,false是水,seas是另一个布尔数组,true是海瓦,false不是)

代码语言:javascript
复制
for (int x = 0; x < length; x++)
{
    for (int y = 0; y < height; y++)
    {
        if (!seed[x, y])
        {
            if (x + 1 < length && seas[x + 1, y])
                seas[x, y] = true;
            else if (x - 1 >= 0 && seas[x - 1, y])
                seas[x, y] = true;
            else if (y + 1 < height && seas[x, y + 1])
                seas[x, y] = true;
            else if (y - 1 >= 0 && seas[x, y - 1])
                seas[x, y] = true;
        }
    }
}

我不能为我的一生在这段代码中找到一个错误,也许一双新的眼睛会有帮助?

我的代码的下一步是找到所有不是海瓦片的水瓦片,并将它们指定为湖瓦。这是通过以下代码片段完成的:(seasseed与上面相同,lakes是一个布尔数组,其中true是湖块,而false不是)

代码语言:javascript
复制
for (int x = 0; x < length; x++)
{
    for (int y = 0; y < height; y++)
    {
        if (!seed[x, y] && !seas[x, y])
        {
            lakes[x, y] = true;
        }
    }
}

这是另一个可能的错误来源,但我再次感到困惑,因为它是如何被打破的。

附加的图像是根据生成的三个布尔数组生成的。绿色是地砖,蓝色是海瓦,水(或浅蓝色)是湖瓦。正如你所看到的,有很大面积的水与海瓷砖相邻,也应该是海瓷砖,但取而代之的是湖瓦。

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-09 18:51:19

作为一个混乱的数学解决方案,您可以重复第一个代码块N时间(其中N等于您的长度变量N-1次,因为您第一次做了+-1检查)。原因是你可以跳过一些它的邻居还没有被标记但稍后会被标记的瓷砖。所以你得过一会儿再回来看看它的邻居有没有标记。显然,有更多的优化方法,需要更少的过程。

代码语言:javascript
复制
for (int z=0;z < length; z++){

for (int x = 0; x < length; x++)
{
    for (int y = 0; y < height; y++)
    {
        if (!seed[x, y])
        {
            if (x + 1 < length && seas[x + 1, y])
                seas[x, y] = true;
            else if (x - 1 >= 0 && seas[x - 1, y])
                seas[x, y] = true;
            else if (y + 1 < height && seas[x, y + 1])
                seas[x, y] = true;
            else if (y - 1 >= 0 && seas[x, y - 1])
                seas[x, y] = true;
        }
    }
}
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37123159

复制
相关文章

相似问题

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