- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
def getRegionSize(cell, world):
region = []
frontier = [cell]
val = world[cell[0]][cell[1]]
while(len(frontier) > 0):
item = frontier.pop()
region.append(item)
x = item[0]
y = item[1]
for i in [-1,1]:
for j in [-1,1]:
if (x+i,y+j) not in frontier and (x+i,y+j) not in region:
if not (x + i > width - 1 or x + i < 0 or y + j > height - 1 or y + i < 0) and world[x+i][y+j] == val:
frontier.append((x+i,y+j))
return len(region)
我希望我的函数能够确定连接到给定单元格的区域的大小。该函数以世界(二维二进制矩阵)和单元(世界中的(x,y)坐标)为参数,并返回与单元相连的区域的大小。
此函数的工作原理类似于洪水填充,但我只对重新着色区域的大小感兴趣,而不是重新着色区域。该功能运行良好,但速度很慢。对于大小大于 ~4000 的区域,需要几秒钟的时间才能返回。我是否做错了什么,或者对于大面积来说应该很慢?
编辑:为了清晰起见进行了编辑。
最佳答案
在:如果 (x+i,y+j) 不在边界且 (x+i,y+j) 不在区域:
,您正在测试 cell
位于 frontier
或 region
中,两者都是列表,因此搜索它们需要 O(n)。
1)您不需要检查单元格是否在边界内。只要您忽略区域中已有的单元格,您就可以根据需要多次将单元格添加到边界。
2)对region
使用更高效的数据结构,即集合。
关于Python Flood Fill - 如何优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47343495/
我正在编写一种填充方法,用红色填充图像(狗的轮廓)。 在我的 TestShellDlg.cpp 中是洪水填充方法。 CTestShellDlg::m_pScreenDib 成员是一个 CDIB32 位
如果我尝试填充一个 100x100 的矩形,则会出现溢出。50x50 效果很好。 有没有办法解决溢出问题? 我还打印出 Stack Number,有时工作矩形 Stack 比大的 Stack 高(它在
游戏链接在这里: http://floodit.appspot.com/ 规则很简单,你必须从邻居中选择一种颜色,起点是左上角,然后颜色发生变化,你就淹没了更多的区域。目标是淹没整个网格。 stack
我正在使用 Java 开发一个小型绘图应用程序。我正在尝试通过实现 Flood Fill 算法来创建“桶填充”工具。 我尝试使用递归实现,但这是有问题的。不管怎样,我在网上搜索了一下,似乎为此目的,建
题目地址:https://leetcode.com/problems/flood-fill/description/ 题目描述 Animage is represented by a 2-D ar
def getRegionSize(cell, world): region = [] frontier = [cell] val = world[cell[0]][cell[
我必须找出阻碍交通的下雨阈值。 所以,我必须打印降水阈值来阻止交通。 例如) 3 3 0 1 2 1 2 3 0 2 6 输出:3 这个问题有什么好的算法或者关键词吗? 谢谢 最佳答案 找到一棵具有最
我有 N × M 个网格,其中每个单元格都用一种颜色着色。 当玩家点击颜色为 α 的网格中的任何单元格时,网格最左上角的颜色为 β 的单元格会接收到颜色 α,但不仅如此:所有连接到的单元格仅使用颜色
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我正在开发一个 Paint 应用程序,其中我正在实现类似于 MS Paint 应用程序的 BucketFill 功能。 我已经使用几种 FloodFill 算法对其进行了编码,但是填充颜色过程花费了太
我有一个 C# 应用程序,旨在使用线程在我的服务器中发出 http post 请求。 (这是为了简化问题,因为事实上,有几个不同的trheads在不同的URI上发出请求) 事实证明,这些踏板被设置为在
我正在尝试使用洪水填充来清理扫雷游戏中的开放区域。我做了一个简单的洪水填充函数,但我不断收到堆栈溢出错误代码 public void revealEmpty(int givenIndex){
我有一个具有以下结构的 MySQL 表: CREATE TABLE IF NOT EXISTS `np_voxels` ( `world` VARCHAR(16) NOT NULL, `x`
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 5 年前。 编辑问题以包含 desired behavior, a specific proble
我正在为 python 扫雷器实现一个 flood-fill 算法。 在我展示算法之前,让我定义一些重要的东西: BOARD,打印漂亮时,看起来像这样: X 1 1 1 3 X 2 1 2 X 2
我正在尝试使用 flood fill算法在列表中找到所有相似的相邻对象,并将它们标记为删除。我试图改编维基百科上的伪代码,但卡住了。 列表中的每个对象都有一个 int X 值、一个 int Y 值、一
我正在使用 Java 编写一个简单的绘图应用程序。我正在尝试使用 Flood Fill 算法的递归实现作为我的“桶填充”工具。 但是,这总是给我一个StackOverFlowError。 (无论我使用
我正在尝试制作 Flood-It 风格的游戏,但我遇到了主要算法的问题。 该算法会检查您已经控制的每个方 block ,并找到具有您无法控制的所选颜色的相邻方 block 。 变量: 1 - $boa
我正在寻找最有效的解决方案,有很多方法可以从套接字读取数据和解码 json。我显然应该使用 json.Encoder 和 json.Decoder,因为它们适合套接字的流式处理,但我有防止套接字泛滥的
我正在编写一种填充方法,用红色填充图像(狗的轮廓)。 在我的 TestShellDlg.cpp 中是洪水填充方法。 CTestShellDlg::m_pScreenDib 成员是一个 CDIB32 位
我是一名优秀的程序员,十分优秀!