本帖最后由 shaowu459 于 2022-12-7 00:08 编辑
4楼公式已经获得了所有路径,如果要求最小路径,就可以MAP函数将每个元素按分隔符拆分求和,然后再FILTER(路径数组,每个路径值合计=每个路径值合计数组的最小值)来筛选出来。我们也可以定一个一个dx来直接获得(忽略效率问题)最小值对应的各种路径:
- =LAMBDA(d,m,n,IF(m*n=1,@+d,IF(m=1,dx(d,1,n-1),IF(n=1,dx(d,m-1,1),LET(s,VSTACK(dx(d,m-1,n),dx(d,m,n-1)),t,MAP(s,LAMBDA(x,SUM(--TEXTSPLIT(x,"->")))),FILTER(s,t=MIN(t)))))&"->"&INDEX(d,m,n)))
复制代码
=LAMBDA(d,
m,
n,
IF(m*n=1,@+d,
IF(m=1,dx(d,1,n-1),
IF(n=1,dx(d,m-1,1),
LET(s,VSTACK(dx(d,m-1,n),dx(d,m,n-1)), 堆积各种方案结果
t,MAP(s,LAMBDA(x,SUM(--TEXTSPLIT(x,"->")))), 将方案中数字拆分后求和
FILTER(s,t=MIN(t)) 筛选数值最小的路径
)
)
)&"->"&INDEX(d,m,n) 当前元素之前的最小路径并上当前元素
)
)
|