下面逐步演示一下公式运算的过程和结果:
首先,把REDUCE函数第二参数改成A1:A1:
- =REDUCE(A1:T10,A1:A1,LAMBDA(x,y,IF(MAKEARRAY(10,20,LAMBDA(m,n,IF(INDEX(x,m,n)=0,OR(m=1,IFERROR(INDEX(x,m+{1,-1,0,0},n+{0,0,1,-1}),)=2)))),2,x)))
复制代码 因为第二参数只有一个值,所以也就是只循环一次,结果如下:
可以观察到,第一行的0都变成了2,因为公式中有m=1的判断,只要位于第一行,就把0变成2。
然后把REDUCE函数第二参数改成A1:B1,也就是循环两次,结果如下:
- =REDUCE(A1:T10,A1:B1,LAMBDA(x,y,IF(MAKEARRAY(10,20,LAMBDA(m,n,IF(INDEX(x,m,n)=0,OR(m=1,IFERROR(INDEX(x,m+{1,-1,0,0},n+{0,0,1,-1}),)=2)))),2,x)))
复制代码
可以观察到,第一行所有2下面挨着的0都变成了2,其余的0值没有变化。因为循环到第2行的值时,判断0的上下左右是否有2,有2就意味着和一层的空洞相连,因此就将0变成2。
如此继续增加循环次数,可以观察每次都会将2紧挨着的0变为2:
以此类推,循环到达一定的次数时,所有和2挨着的0就都变成了0,也即所有连着一层空洞的空洞均已找到。
|