网易极客战记官网codecombat|编程解决算法问题「农民过河」,穷举思想轻松学(二)

农夫过河——python类穷举法实现 随机选择带何种东西过河,依次尝试,最终得到过河方案。 阅读详情

用极客战记学习编程,孩子学习的并非只有代码。
在这里插入图片描述
当我们遇到如「农夫过河」之类像脑筋急转弯的算法题,我们动动脑子,或许很快就能直接想出一种解法。

但如果我们想找出所有的解法,是不是就有一定的难度了呢?如何更快更全地找出所有的过河方法呢?

因此,我们需要学会一种更有条理更系统化的处理算法:「穷举法」

在上一节课里,我们已经对题目进行了分析解析,把一个深奥复杂的文字题,通过一系列的转化,变成了一个简单易懂,更适合电脑处理的数字题目。

第二步:优化运算过程

根据上方的分析,我们把问题转化成了在符合条件的情况下,把(0,0,0,0)转化成(1,1,1,1)。此时的题目已经变的简单易懂,接下来就要开始解决题目了。

穷举法的本质就是把所有的答案都尝试一遍,因此穷举法会有比较复杂的运算过程,例如:

第一次过河,狮鹫带士兵过河,结果是

(1,1,0,0)

第二次过河,狮鹫带食人魔过河,结果是

(1,1,1,0)

由于过河必须要狮鹫的帮助,因此,每次过河完的结果,狮鹫一定是与过河人在同一个位置上的。

所以,我们能够得到四种表示过河方式的状态:

(1,0,0,0):狮鹫自己过河

(1,1,0,0):狮鹫带士兵过河

(1,0,1,0):狮鹫带食人魔过河

(1,0,0,1):狮鹫带农民过河

那么再看,如果我们要表示,第一次过河,狮鹫带食人魔过河,可以这样表示:

过河前(0,0,0,0);

过河方式:(1,0,1,0);

过河结果:(1,0,1,0);

第二次过河,狮鹫带士兵过河:

① 先让狮鹫飞回来:

过河前(1,0,1,0);

过河方式:(1,0,0,0);

过河结果:(0,0,1,0);

② 再让狮鹫带士兵过河:

过河前(0,0,1,0);

过河方式:(1,1,0,0);

过河结果:(1,1,1,0);

看看上面的三组过程,仔细观察。

你会发现,当0和1相遇,它的结果就会变成1,当1和1相遇,它的结果会变成0。

因此我们还可以把过河的情况,用更简洁的方式表示出来。

定义一个运算规则:0+1=1,1+1=0

因此,过河就可以这样表示:

(0,0,0,0)+(1,0,1,0)=(1,0,1,0)

(1,0,1,0)+(1,0,0,0)=(0,0,1,0)

然后,我们就可以开始穷举啦。

第三步:开始穷举

最初四个人物的状态为:(0,0,0,0)

四种过河方式为:

(1,0,0,0):狮鹫自己过河

(1,1,0,0):狮鹫带士兵过河

(1,0,1,0):狮鹫带食人魔过河

(1,0,0,1):狮鹫带农民过河

第一次过河:

第一次过河的运算式我们可以这么写:
在这里插入图片描述
看看最后得出的四个结果,我们拿题目的条件来检验一下。

第一个结果(1,0,0,0),只有狮鹫过河,这是没有意义的过河,所以这一结果不可取。

第二个结果(1,1,0,0),狮鹫带士兵过河,那么这样农民和食人魔就都是0,单独呆在了一块,农民就会受到食人魔的攻击,因此也是不行的。

第三个结果(1,0,1,0),狮鹫带食人魔过河,士兵和农民在一边,狮鹫和食人魔在一边,不会发生问题,这个结果可行。

第四个结果(1,0,0,1),狮鹫带农民过河,士兵和食人魔呆在了一块,这也不行。

因此可以得出,第一次过河的正确过河方式是:

(0,0,0,0)+(1,0,1,0)=(1,0,1,0)狮鹫带食人魔过河

第二次过河:

而第二次过河,需要先让狮鹫飞回右边,同样也是有四种过河方式:

第一步,先让狮鹫飞回右边,同样也是有四种过河方式:
在这里插入图片描述
但,此时这边只有食人魔和狮鹫,因此可取的过河方式仅有(1,0,0,0)和(1,0,1,0):
在这里插入图片描述
对结果进行分析,若是第二种方式,(0,0,0,0)等于又变回没过河前的状态了,不可取,因此结果为让狮鹫自己飞回去:(0,0,1,0)

第三次过河:

然后再拿上面的结果进行第三次过河的运算:
在这里插入图片描述
同样,再次分析,得出结果。

(1,0,1,0)等于又回到了上一步的状态,因此不可取;

(1,1,1,0)可行

(1,0,1,1)可行

每次都取可行的结果进行运算,直到算出(1,1,1,1),如此下去,就能利用穷举,把所有的过河方式给穷举出来啦。

穷举法的利弊

穷举法的思想就是如此,首先对题目和运算过程进行分析,让它能够以更具逻辑的方式表达出来,然后,算出所有的结果并检验是否可行。

虽然<农民过河>就像脑筋急转弯一样简单,但真要找出所有的解决方法,不用算法,直接思考,还是需要一定的时间。

而使用上更有逻辑的穷举法,**甚至无需太多的思考,跟着运算过程一步步算下去,机械化地就能得到所有的正确结果,**精准无误,手动计算都这么方便了,那么用电脑代码实现,只会更快更方便。

它的优点就在于,它是一个极其简单易懂的算法。就像解决<农夫过河>问题一样,我们可以十分轻松地把穷举法的思想带进我们的生活问题中使用。

而穷举的缺点十分明显:

穷举的方法很逻辑化,易于执行,但计算所有结果,就为了找出几个正确结果,操作量十分庞大,十分麻烦,如果题目变得更加复杂,那穷举就变得更不实用了。

在未来,你还会学到更多更强大的算法,与穷举法相比,它们还可以更智能地得到条件,把无用运算筛选掉,提高效率。

如果题目变得更为复杂,哪怕是电脑,穷举都需要非常久的工作时间,远远不如其他先进的算法。

事实上,无论哪种算法,都有利弊,都有比它先进的算法,可见,唯有不断地学习,掌握越来越多先进的知识,才是最先进的算法。

本攻略发于极客战记
极客战记——学编程,用玩的!

15 个边玩游戏边学编程的网站 前言经常听到有朋友说,学习编程是一件非常枯燥无味的事情。其实,大家有没有认真想过,可能是我们的学习方法不对?比方说,你有没有想过,可以通过打游戏来学编程?今天我想跟大家分享几个网站,教你如何通过边打游戏边学编程!1、Coding Games一边玩游戏,一边挑战编程难题。Coding games 支持包括 PHP、C、JavaScript 在内的 20 多种编程语言。用户界面功能强大,可以定制。例如,你可以选择你的代码编辑器的风格:Emacs、Vim、Classic。如果你想提升编程技能,玩 Coding . 阅读详情

相关推荐

狼、羊、菜、农夫过河问题 穷举 Python实现

穷举问题中的狼、羊、菜和农夫过河问题

sinat_32682001的博客 7425

狼、羊、菜和农夫过河问题[超详细解析,CPP实现]

农夫需要把狼、羊、菜和自己运到河对岸去(不知道为啥要运狼,别问我),只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手的问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请考虑一种方法,让农夫能够安全地安排这些东西和他自己过河。 算法设计思路 这是一个很简单的问题,在狼、羊和菜这个食物链上,关键是中间的羊,因为狼不吃菜,所以要安全过河,农夫的第一件事就是带羊走,拆开这个...

KongJHong的博客 5万+

通过Python的列表、while循环,穷举法解决农夫过河问题

题目:一农夫带着一头狼,一只羊和一担草过河,小船只能一次装载农夫和一样货物,狼会吃羊,羊会吃草,只有农夫在时才安全。现欲让所有物品包括农夫都安全过道河对岸,使用程序实现求解。 学习完毕《Python编程:从入门到实践》一书,掌握的代码知识不是很多,看到这题偶然有了兴致,试着依靠书本内容完成该题目。代码水平低下,希望各位大佬不要介意,也非常感谢大家能够批评指正! 代码段 from random import choice left = ['W','S','V'] right = [] ship =

qq_35853048的博客 1471

网易极客战记官网codecombat|当算法进入游戏,解开用代码画画的奥秘!

什么是算法? 算法二字看起来玄而又玄,许多初入门的编程新手更是始终摸不清算法的门道,但其实,算法并没有你们想像的那么复杂玄奥。 百科对算法的解释为:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 总的来说,能够输入并且输出的东西就叫做算法。 例如:冒泡排序法,递归法,或者是一些计算幂,计算角度绘制圆形的代码函数也...

codecombat163的博客 995

数学建模—— 农夫的选择

基于数学Matlab的基础,利用建模知识,解决问题。利用Excel进行数据处理,最终决定农夫圈养羊数。

穷举法解题:一筐鸡蛋,一个一个拿

1个1个正好, 2个2个剩1个, 3个3个正好, 4个4个剩1个, 5个5个剩1个, 6个6个剩余3个, 7个7个正好, 8个8个剩1个, 9个9个正好, 这筐一共多少?

边玩边学,15个学习Python 的编程游戏网站!

① Python所有方向的学习路线图,清楚各个方向要学什么东西② 600多节Python课程视频,涵盖必备基础、爬虫和数据分析③ 100多个Python实战案例,含50个超大型项目详解,学习不再是只会理论④ 20款主流手游迫解 爬虫手游逆行迫解教程包⑤ 爬虫与反爬虫攻防教程包,含15个大型网站迫解⑥ 爬虫APP逆向实战教程包,含45项绝密技术详解⑦ 超300本Python电子好书,从入门到高阶应有尽有⑧ 华为出品独家Python漫画教程,手机也能学习。

2301_76161259的博客 1万+

农夫过河问题(图的遍历:深度优先搜索)

农夫带着一只狼,一只羊和一筐菜从左岸到右岸……

网易极客战记官网codecombat|编程解决算法问题「农民过河」,穷举思想轻松学(一)

用极客战记学习编程,孩子学习的并非只有代码。 很多关卡在向孩子教学代码的同时,更是在潜移默化地训练孩子的编程思维。 在最开始的地牢地图中,孩子需要使用「While-True」循环语句,穿过一个又一个结构重复的迷宫。 在学习「While-True」循环语句的同时,也在训练着使用「循环思维」解决重复问题的能力: 发现并拆解重复部分 解决重复问题 循环运行问题的解决方法 这样,就能只用一段代码,高...

codecombat163的博客 760

为什么我把「大模型Clouder认证:基于百炼平台构建智能体应用」作为大模型学习的第一站?从 0 到拿证全流程经验分享

【摘要】作为一个刚拿下「大模型 Clouder 认证:基于百炼平台构建智能体应用」的过来人,想在开头就和大家聊聊这个认证的特殊意义 —— 在企业加速 AI 落地的今天,能用低代码快速构建智能体应用,已经成为 AI 从业者的核心竞争力。无论是企业微信客服提效、钉钉机器人自动化办公,还是网站智能助手升级,这些场景化能力正是当下数字化转型的刚需。

davidkorhenn的博客 1527

【科研学习】Demo3D2015安装包以及图文安装步骤

安装包 点击下图的.exe文件,安装 不需要解压,打开注册机 如下图: 点击上图的.exe文件,出现下图 先点击 patch 打开安装目录下的Demo3D.licensing.dll文件,然后点击Generate,生成dvt-license文件,保存即可 打开安装完成的Demo3D 2015(64-bit),一般破解没完成的,会出现一个request a license 的问题,点击find license 的那一行 点击后找到自己Generate,生成dvt

KaelCui的博客 1万+

边玩边学!15 个学编程的游戏网站!

经常听到有朋友说,学习编程是一件非常枯燥无味的事情。其实,大家有没有认真想过,可能是我们的学习方法不对?比方说,你有没有想过,可以通过打游戏来学编程?今天想跟大家分享几个网站,教你如何通过...

关注微信公众号【开源Linux】,后台回复『10T』,领取10T学习资源大放送,涵盖Linux、虚拟化、容器、云计算、网络、Python、Go等书籍和视频 1212

软件工程实验报告--用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

用Visio绘制数据流图、ER图、状态图、软件结构图、程序流程图、系统流程图

m0_73814332的博客 4162

农夫过河问题算法设计与实现

农夫过河算法基于队列的实现

NEWPLAN的专栏 3万+

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法 前言 在训练自己模型的时候,会遇到GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢的问题。这个问题一方面是由于硬件没有设置到最佳工作状态,另一方面是代码中参数没有设置好。最近在跑Halcon DL遇到这个问题,而Halcon不像开源的几个框架那样自由,代码封装的比较多。所以遇到这种问题,只能在参数最优的情况下,通过设置硬件参数来提升性能。 当然,在跑DL之前,无论什么框

ZiLiangQin的博客 9914

《AI 时代FPGA的全栈开发实战・从入门到精通》专栏启动说明

《智驱FPGA》专栏面向初学者,聚焦AI时代FPGA开发新范式,以ChatGPT、ICCoder2.0等工具全程辅助,覆盖纯逻辑、Zynq软硬协同、端侧AI加速、高速接口等核心方向。通过126节图文+14个实战项目,传授AI生成代码、Prompt工程、时序优化等能力,助力学员从零成长为具备工程竞争力的FPGA工程师,结业可独立完成完整项目并写入简历。

现任某外企的算法工程师!专注于人工智能、嵌入式、FPGA、论文写作四大主题的教程和经验分享!辅导请➕v :sci666888999 172

图结构解决农夫过河问题(二附源代码)

【什么是图结构】:图结构就是所有数据元素都可以连接,跟树结构有很大区别。 图结构包括两大部分: 1、顶点:所有的数据元素,每个元素就是一个顶点(数字1、2、3、4、5、6)。 2、边:连接两个元素之间的线就是边。 图分为无向图和有向图:【无向图】:没有方向的图结构 【有向图】:带有箭头方向的图结构 无向图和有向图最大的区别在于边: 1、无向图的<1,2>和<2,1>代表同一条边。

GodLei1995 8569

【干货】SAP特殊库存:Q库存(项目库存)全解析,搞懂ETO模式的核心!

在 SAP 系统中,

我小时候很黑的博客 910

网易极客战记计算机科学3攻略,【网易官方】极客战记(codecombat)攻略-森林-以静制动stillness-in-motion...

(点击图片进入关卡)通过使用嵌套 if 语句停留在中间。简介将每个 if/else 考虑成一个容器,其中又可以容纳另一个 if/else 结构!参见:enemy = hero.findNearestEnemy()if enemy:if enemy.type == "munchkin":hero.say("我看到一个矮人!")else:hero.say("我看见其他类型的敌人!")else:hero...

weixin_42510453的博客 951

3.4 ISIS和OSPF之间路由引入

通过以上输出可以看到OSPF的路由引入到了IS-IS中。通过以上输出可以看到ISIS的路由没有传递给OSPF。通过以上输出可以看到OSPF的路由没有传递给ISIS。通过以上输出可以看到ISIS的路由被引入进了OSPF。掌握在IS-IS中引入OSPF路由的方法。掌握在OSPF中引入IS-IS路由的方法。图3-3:ISIS和OSPF之间路由引入。在R3上把ISIS的路由引入到OSPF。OSPF引入外部路由的缺省度量值为1。在R3上把OSPF的路由引入到ISIS。引入的外部路由类型为Type2。

lwljh134的博客 1803

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java数据结构 农夫过河_数据结构笔记分享:18 农夫过河(图的算法运用)

问题描述一个农夫带着一只狼,一棵白菜和一只山羊要从一条河的南岸到北岸,农夫每次只能带一样东西过过河,但是任意时刻如果农夫不在场时,狼要吃羊、羊要吃菜,请为农夫设计过河方案。分析:要求解农夫过河问题,首先要选择一个对问题中每个角色的位置进行描述的方法。用四位二进制数顺序表表示农夫、狼、白菜和羊的位置。用1表示在南岸,0表示在北岸。共有0000~1111中状态,以每一种状态为图的一个顶点,判断状态中可...

weixin_29291863的博客 1168

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

图的深度优先遍历实现农夫过河

数据结构课程设计报告 农夫过河 ...

仲夏宁叶香的博客 6173

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

人狼羊菜过河matlab,农夫过河(带羊,菜,狼,过河) C语言程序设计流程图

农夫过河(带羊,菜,狼,过河)C语言程序设计流程图0shadowylpw2013.05.15浏览830次分享举报#include #include #include #define MAX_STEP 20//index: 0 - 狼,1-羊,2-菜,3-农夫,value:0-本岸,1-对岸int a[MAX_STEP][4];int b[MAX_STEP];char *name[] ={"空手"...

weixin_42497299的博客 2656
上一篇: 【转载】网易极客战记官方攻略-地牢-Kithgard 地牢
下一篇: 网易极客战记官网codecombat|编程解决算法问题「农民过河」,穷举思想轻松学(一)
「已注销」
博客等级 码龄7年 13粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值