#沙雕科普# (书接上文 https://t.cn/A6afxQja ,扩展一下上一条的方法一,暴力BFS应该怎么做)
还是图中的这道题。BFS=Breadth-First Search。既然有breadth 有search,很显然我们是在搜索一棵树。什么树?数据结构里的树结构。这种结构里每一个节点对应一个父节点和零个到任意多个子节点。画出来的话像是一棵倒立生长的树。
而咱们现在要搜索的这个树,每个节点代表一个桶中盛水的状态。
还是延用(a/A,b/B)的表达方法,表达容量为A的桶里已经有水a,容量为B的桶里已经有水b。
根节点,也就是我们开始搜索的初始状态,肯定是(0/4,0/9)。为了方便节约空间,我们来约定一下一个剪枝规则。即:已经在之前出现过的一模一样的(a/A,b/B),不予展开。这样可以节约很多空间。
第一步的可能性有两个:
(4/4,0/9)(0/4,9/9)
它们分别对应这些第二步:
(0/4,0/9)(4/4,9/9)(0/4,4/9);(0/4,0/9)(4/4,9/9)(4/4,5/9)
六个状态其中有三个不重复的新状态(4/4,9/9)(0/4,4/9)(4/4,5/9),对应的第三步分别有:
(4/4,0/9)(0/4,9/9);
(0/4,9/9)(4/4,4/9)(4/4,0/9)(0/4,0/9);
(0/4,5/9)(4/4,9/9)(4/4,0/9)(0/4,9/9);
其中不和已经出现的状态重复的有:(4/4,4/9)和(0/4,5/9)。
这两个状态对应的第四步分别有:
(0/4,4/9)(4/4,0/9)(4/4,9/9)(0/4,8/9);
(4/4,1/9)(0/4,0/9)(0/4,9/9)(4/4,5/9);
其中不曾出现过的新状态有:
(0/4,8/9)和(4/4,1/9)。
对应的第五步分别有:
(0/4,9/9)(4/4,8/9)(4/4,4/9);
(0/4,1/9)(0/4,5/9)(4/4,0/9)。
新状态:(4/4,8/9)和(0/4,1/9)。
对应的第六步都有:
(0/4,8/9)(4/4,0/9)(3/4,9/9);
(1/4,0/9)(0/4,0/9)(4/4,1/9)(0/4,9/9)
这里的新状态有(3/4,9/9)和(1/4,0/9)。
展开得第七步:
(3/4,0/9)(4/4,9/9)(4/4,8/9)(0/4,9/9);
(1/4,9/9)(4/4,0/9)(0/4,1/9)(0/4,0/9)
其中值得下一步展开的新状态有(3/4,0/9)和(1/4,9/9)。
再下一步的展开中:
(4/4,0/9)(3/4,9/9)(0/4,3/9)(0/4,0/9);
【(4/4,6/9)】……
我们还没完成这一层的搜索就已经看到了凑出6的解了。
回溯一下(依次找出父节点)都是怎样到这一步的就得到过程:
(0/4,0/9)
(0/4,9/9)
(4/4,5/9)
(0/4,5/9)
(4/4,1/9)
(1/4,0/9)
(1/4,9/9)
(4/4,6/9)
(0/4,1/9)
BFS的做法比较不费脑子,机械化通用化,但就是可能会比较耗费空间而且不elegant。但是它有一个好处,就是通过BFS得出的解一定是步骤最少的解。因为是广度优先的搜索嘛……
另一个好处应该就是编程实现非常容易吧。
还是图中的这道题。BFS=Breadth-First Search。既然有breadth 有search,很显然我们是在搜索一棵树。什么树?数据结构里的树结构。这种结构里每一个节点对应一个父节点和零个到任意多个子节点。画出来的话像是一棵倒立生长的树。
而咱们现在要搜索的这个树,每个节点代表一个桶中盛水的状态。
还是延用(a/A,b/B)的表达方法,表达容量为A的桶里已经有水a,容量为B的桶里已经有水b。
根节点,也就是我们开始搜索的初始状态,肯定是(0/4,0/9)。为了方便节约空间,我们来约定一下一个剪枝规则。即:已经在之前出现过的一模一样的(a/A,b/B),不予展开。这样可以节约很多空间。
第一步的可能性有两个:
(4/4,0/9)(0/4,9/9)
它们分别对应这些第二步:
(0/4,0/9)(4/4,9/9)(0/4,4/9);(0/4,0/9)(4/4,9/9)(4/4,5/9)
六个状态其中有三个不重复的新状态(4/4,9/9)(0/4,4/9)(4/4,5/9),对应的第三步分别有:
(4/4,0/9)(0/4,9/9);
(0/4,9/9)(4/4,4/9)(4/4,0/9)(0/4,0/9);
(0/4,5/9)(4/4,9/9)(4/4,0/9)(0/4,9/9);
其中不和已经出现的状态重复的有:(4/4,4/9)和(0/4,5/9)。
这两个状态对应的第四步分别有:
(0/4,4/9)(4/4,0/9)(4/4,9/9)(0/4,8/9);
(4/4,1/9)(0/4,0/9)(0/4,9/9)(4/4,5/9);
其中不曾出现过的新状态有:
(0/4,8/9)和(4/4,1/9)。
对应的第五步分别有:
(0/4,9/9)(4/4,8/9)(4/4,4/9);
(0/4,1/9)(0/4,5/9)(4/4,0/9)。
新状态:(4/4,8/9)和(0/4,1/9)。
对应的第六步都有:
(0/4,8/9)(4/4,0/9)(3/4,9/9);
(1/4,0/9)(0/4,0/9)(4/4,1/9)(0/4,9/9)
这里的新状态有(3/4,9/9)和(1/4,0/9)。
展开得第七步:
(3/4,0/9)(4/4,9/9)(4/4,8/9)(0/4,9/9);
(1/4,9/9)(4/4,0/9)(0/4,1/9)(0/4,0/9)
其中值得下一步展开的新状态有(3/4,0/9)和(1/4,9/9)。
再下一步的展开中:
(4/4,0/9)(3/4,9/9)(0/4,3/9)(0/4,0/9);
【(4/4,6/9)】……
我们还没完成这一层的搜索就已经看到了凑出6的解了。
回溯一下(依次找出父节点)都是怎样到这一步的就得到过程:
(0/4,0/9)
(0/4,9/9)
(4/4,5/9)
(0/4,5/9)
(4/4,1/9)
(1/4,0/9)
(1/4,9/9)
(4/4,6/9)
(0/4,1/9)
BFS的做法比较不费脑子,机械化通用化,但就是可能会比较耗费空间而且不elegant。但是它有一个好处,就是通过BFS得出的解一定是步骤最少的解。因为是广度优先的搜索嘛……
另一个好处应该就是编程实现非常容易吧。
利拉德2019年季后赛首轮对阵雷霆每场得分一览:
第一场:雷霆99-104开拓者
利拉德30分 投篮9/21 三分5/11 罚球7/8
第二场:雷霆94-114开拓者
利拉德29分 投篮10/21 三分4/8 罚球5/7
第三场:开拓者108-120雷霆
利拉德32分 投篮10/21 三分3/9 罚球9/10
第四场:开拓者111-98雷霆
利拉德24分 投篮7/19 三分4/8 罚球6/6
第五场:雷霆115-118开拓者
利拉德50分 投篮17/33 三分10/18 罚球6/8
该轮系列赛,利拉德场均33.0分,投篮命中率46.1%,三分命中率48.1%,罚球命中率84.6%。
第一场:雷霆99-104开拓者
利拉德30分 投篮9/21 三分5/11 罚球7/8
第二场:雷霆94-114开拓者
利拉德29分 投篮10/21 三分4/8 罚球5/7
第三场:开拓者108-120雷霆
利拉德32分 投篮10/21 三分3/9 罚球9/10
第四场:开拓者111-98雷霆
利拉德24分 投篮7/19 三分4/8 罚球6/6
第五场:雷霆115-118开拓者
利拉德50分 投篮17/33 三分10/18 罚球6/8
该轮系列赛,利拉德场均33.0分,投篮命中率46.1%,三分命中率48.1%,罚球命中率84.6%。
https://t.cn/A6XWU4jE 猫.荭包 | https://t.cn/A6XWH6eu 东.荭包,3次/天
想念挂面:极速版提交,叠加生活费8-3/9-3
【7.90】龙须面 180g*10袋 https://t.cn/A6iqA7ia
【11.90】刀削面 1000g*2袋 https://t.cn/A6XTJ7Ho
【19.90】君乐宝 简醇红枣每日活菌 酸奶组合 100g*20袋 https://t.cn/A6X1StXX
叠加极速版生活费20-4,2-6℃冷藏,保质期21天
想念挂面:极速版提交,叠加生活费8-3/9-3
【7.90】龙须面 180g*10袋 https://t.cn/A6iqA7ia
【11.90】刀削面 1000g*2袋 https://t.cn/A6XTJ7Ho
【19.90】君乐宝 简醇红枣每日活菌 酸奶组合 100g*20袋 https://t.cn/A6X1StXX
叠加极速版生活费20-4,2-6℃冷藏,保质期21天
✋热门推荐