节省时间的算法,在有约束的网格中找到最大的区域

问题描述

在2D网格中,我们从原点(0,0)开始,然后每次可以移动一个像元(x + 1,x-1,y + 1,y-1)。 我必须找到受此约束的最大区域:对于该区域中的任何一点,abs(x)的位数之和加上abs(y)的位数之和最多应为23。

例如,点(59,75)无效,因为5 + 9 + 7 + 5 = 26。 点(-51,-7)有效,因为5 +1 + 7 = 13,小于23。

有什么方法可以解决这种复杂的时间?

解决方法

看这张照片。它以白色表示那些从坐标原点可到达的第一象限中数字总和

似乎不难进行广度优先的搜索,例如具有特殊边界条件[System.Collections.ArrayList]$teststringlist=New-Object System.Collections.ArrayList $teststring ="Test1,Test2,Test3" $teststringlist = $teststring.Split(",") $teststringlist=$teststringlist.RemoveAt(0) (坐标限制为699)的洪水填充并全部计算。

白色填充从原点扩展到达到边界值。此过程类似于第23级的水驱。黑岛留在白海中,坚实的黑色边界限制了它。白色像素计数是原点周围连续区域的面积。

此外,可以根据坐标确定每100x100平方中的白点数量并获得数学公式。

enter image description here

缩放的片段:

enter image description here

Delphi中的原始实现(有有效的非递归Floodfill实现)可提供白色像素计数592597

sumdigit <=23