ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: cpa_cpv

[求助] 一道很难的动态规划题,太难了。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-6-17 16:36 | 显示全部楼层
chl0924 发表于 2025-6-17 13:23
如果其上下左右单元格之邻接单元格,也是陆地?
有考虑到这点吗?

可以自己举例试试一下,感觉可以

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-6-17 16:53 | 显示全部楼层
飞天篮球猪 发表于 2025-6-17 14:28
函数递归...仅供参考...

太难了,太难了,我要看哭了!!! 球神,帮一下。

TA的精华主题

TA的得分主题

发表于 2025-6-17 17:08 | 显示全部楼层
cpa_cpv 发表于 2025-6-17 16:53
太难了,太难了,我要看哭了!!! 球神,帮一下。

PQ深度优先,你对着函数递归转换吧,递归四个方向的核心逻辑是一样的。
贴个广度优先的代码...仅供参考...
2025-06-17_170319.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-6-17 17:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
飞天篮球猪 发表于 2025-6-17 17:08
PQ深度优先,你对着函数递归转换吧,递归四个方向的核心逻辑是一样的。
贴个广度优先的代码...仅供参考.. ...

这个,我得看一年,才能看得懂,估计。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-6-17 17:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我发现这种题,目前是我的瓶颈。好难上去了再。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-6-17 17:28 | 显示全部楼层
不是说 没法定义全局变量,不能用 广搜吗?球神,你这代码里 有全局变量吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-6-17 17:29 | 显示全部楼层
冬神的那个代码,哪个老师能辛苦帮解释一下 详细的过程 和 逻辑?

TA的精华主题

TA的得分主题

发表于 2025-6-17 18:08 | 显示全部楼层
才分不够,只能用笨方法。
这个问题,实在太为难PQ了。
  1. let
  2.     xSource = 表1,
  3.     xRows = Table.RowCount(xSource),
  4.     xColumnNames = Table.ColumnNames(xSource),
  5.     xCols = List.Count(xColumnNames),
  6.     fx取代全表 = (tbl, xOld, xNew) => Table.ReplaceValue(tbl,xOld,xNew,Replacer.ReplaceValue, Table.ColumnNames(tbl)),
  7.     fxR读取值=(tbl as table, x坐标 as number, y坐标 as number) =>
  8.         if x坐标<1 or y坐标<1 then
  9.             0
  10.         else
  11.             Record.Field(tbl{y坐标-1},Table.ColumnNames(tbl){x坐标-1}),
  12.     fxW修改值=(tbl as table, x轴 as number, y轴 as number, newValue as any)=>
  13.         let
  14.             xColumns = Table.ColumnNames(tbl),
  15.             x轴N=xColumns{x轴-1},
  16.             xIndex = Table.AddIndexColumn(tbl, "Index", 1, 1, Int64.Type),
  17.             xTemp = Table.AddColumn(xIndex, "temp", each if [Index]=y轴 then newValue else Record.Field(_,x轴N)),
  18.             xRemove = Table.RemoveColumns(xTemp,{x轴N, "Index"}),
  19.             xRename = Table.RenameColumns(xRemove,{{"temp", x轴N}}),
  20.             xReOrder = Table.ReorderColumns(xRename,xColumns)
  21.         in
  22.             xReOrder,
  23.     x_1 = List.Accumulate({1..xCols}, xSource, (accX,x)=>
  24.             List.Accumulate({1..xRows}, accX, (accY,y)=>
  25.                 let
  26.                     x值 = fxR读取值(accY,x,y),
  27.                     x上 = fxR读取值(accY,x,y-1),
  28.                     x下 = if y+1>xRows then 0 else fxR读取值(accY,x,y+1),
  29.                     x左 = fxR读取值(accY,x-1,y),
  30.                     x右 = if x+1>xCols then 0 else fxR读取值(accY,x+1,y),
  31.                     xList = {x值,x上,x下,x左,x右},
  32.                     xMaxList = List.Max(xList),
  33.                     xMaxTbl =  List.Accumulate(Table.ToRows(accY),0,(accZ,z)=> if List.Max(z)>accZ then List.Max(z) else accZ),
  34.                     xValue = if xMaxTbl = 1 then 2 else if xMaxList=1 then xMaxTbl+1 else xMaxList,
  35.                     x值1 = if x值=0 then accY else fxW修改值(accY,x,y,xValue),
  36.                     x上1 = if x值=0 or x上=0 then x值1 else if x上=1 then fxW修改值(x值1,x,y-1,xValue) else fx取代全表(x值1,x上,xValue),
  37.                     x下1 = if x值=0 or x下=0 then x上1 else if x下=1 then fxW修改值(x上1,x,y+1,xValue) else fx取代全表(x上1,x下,xValue),
  38.                     x左1 = if x值=0 or x左=0 then x下1 else if x左=1 then fxW修改值(x下1,x-1,y,xValue) else fx取代全表(x下1,x左,xValue),
  39.                     x右1 = if x值=0 or x右=0 then x左1 else if x右=1 then fxW修改值(x左1,x+1,y,xValue) else fx取代全表(x左1,x右,xValue)
  40.                 in
  41.                     x右1
  42.             )),
  43.     Result = List.Count(List.Distinct(List.Accumulate(Table.ToRows(x_1),{},(acc,x)=>acc&x)))-1
  44. in
  45.     Result
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-6-17 18:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chl0924 发表于 2025-6-17 18:08
才分不够,只能用笨方法。
这个问题,实在太为难PQ了。

这题,能出结果 的,都是高手!!!厉害。

TA的精华主题

TA的得分主题

发表于 2025-6-17 18:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cpa_cpv 发表于 2025-6-17 17:28
不是说 没法定义全局变量,不能用 广搜吗?球神,你这代码里 有全局变量吗?

没有的,要在过程中产生。PQ或者函数递归的描述能力要逊色不少,数据结构决定的。没有全局变量是因为PQ这种不可变(immutable)的特性决定的。能支持变量的,深度优先只要5句话,VBA,JSA都可以写的很简单:
2025-06-17_185102.jpg

PQ深搜需要点技巧,没人点破,也就没人会。
2025-06-17_185155.jpg

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-6 14:19 , Processed in 0.027090 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表