深度优先遍历算法-01小偷偷东西问题

小偷偷东西问题

  • 前言
    • 深度优先遍历是经典的图论算法,深度优先遍历算法的搜索逻辑和它的名字一样,只要有可能,就尽量深入搜索,直到找到答案,或者尝试了所有可能后确定没有解。
    • 简单来说,深度优先遍历就是按照某规则(如检索当前节点的第一个子节点)检索某个节点,直到检索完毕再去检索其他节点。
    • 搜索问题的本质就是试探问题的所有可能选择,按照特定的规律和顺序,不断去搜索答案,直到找到问题的解。如果把所有可能都走了一遍,还没有找到解,就说明这个问题没有解。注意:深度优先遍历一定要按照规则尝试所有的可能。
    • 深度优先遍历是图论的经典算法,从某个节点v出发开始进行搜索,不断搜索直到该节点的所有边都被遍历完。当节点v的所有边都被遍历以后,深度优先遍历算法则需要回溯到v的前驱节点,来继续搜索这个前驱节点的其他边。如果还存在尚未被遍历的节点,则深度优先遍历算法会按照统一的规则从这些剩下的节点中选择一个节点再重复同样的遍历过程。这样的搜索过程从最开始的节点一直持续到最后一个节点的所有边都遍历完。
    • 二叉树的先序、后序和中序都属于深度优先遍历,层序遍历属于广度优先遍历。(关于二叉树的数据结构只是不提)
  • 问题描述
    • 有一个小区的别墅按照二叉树结构分布,也就是说,除了第一个别墅,其余每个别墅都和另一个“父”别墅连接。现在有个小偷,想要进入别墅偷窃,但是,一旦进入两个直接连接的别墅(只会有一段线相连),警报会触发,每个节点的值表示别墅财务的价值,问如何走在不报警的情况下偷得最多财物。
  • 问题分析
    • 对于上图,显然我选择头4和5这两个别墅,得到最多财物。
    • 显然,一旦选择了某个节点,就意味着放弃所有的这个节点的直接子节点(在下一层与之相连的节点)。
    • 不妨定义节点这个数据结构记录当前节点的价值,以及偷了该节点得到的价值和不偷该节点得到的价值。很容易发现,每个节点的偷值是左侧子节点的不偷值+右侧子节点的不偷值+节点的价值,每个节点的不偷值是左侧子节点的最大值(偷与不偷中较大者)+右侧子节点的最大值。
    • 那么想要得到根节点的偷与不偷值,只要知道其子节点的,其子节点的又是来自子节点的子节点的,显然,这是一个递归过程,最底层节点的属性值一开始是确定的,用来构造父节点的属性值。最后输出根节点的两值较大者即可。
  • 代码
    •   # -*-coding:utf-8-*-class TreeNode:def __init__(self, x, l, r):self.value = xself.left = lself.right = rdef get_value(root):rst = search(root)return max(rst[0], rst[1])def search(root):"""返回二维数组[偷值,不偷值]:param root::return:"""if root is None:return [0, 0]left = search(root.left)right = search(root.right)rob_value = root.value + left[1] + right[1]skip_value = max(left[0], left[1]) + max(right[0], right[1])return rob_value, skip_valueif __name__ == '__main__':f = TreeNode(1, None, None)e = TreeNode(3, None, None)d = TreeNode(1, None, None)b = TreeNode(4, d, e)c = TreeNode(5, f, None)a = TreeNode(3, b, c)print(get_value(a))
  • 补充说明
    • 具体代码可以查看我的Github,欢迎Star或者Fork
    • 参考书《你也能看得懂的Python算法书》
    • 显然,这种思路适合求得最优解,但是对于输出具体路径略显麻烦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/70812.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百家云在人工智能领域再有新动作,发布应用于多个行业的AIGC解决方案

4月17日消息,音视频SaaS上市公司百家云(股票代码:RTC)今日宣布,公司将正式推出应用于多个垂直行业及场景的人工智能生成内容及视频解决方案。 百家云总裁马义表示,此次发布的解决方案,将在极短…

可以远程连接服务器,但是无法ping通问题

右键电脑,找到管理 在服务器管理里找到配置项 在配置项里找到 高级安全windows防火墙 在高级安全windows防火墙里,找到,按如下图示,找到“文件和打印机共享(回显请求-ICMPv4-in)双击。此时图片状态默…

解决连接vcenter (客户端无法向服务器发送完整的请求。(基础连接已经关闭:发送时发生错误。)) 问题...

vCenter版本 5.5 vCenter 安装在server 2008 r2上面,今天补丁一打,重启后就无法连接vcenter了,起初以为是补丁的问题导致vcenter工作不正常,卸载了补丁依旧无法正常连接。 报未知连接错误,(客户端无法向服务…

微信提示已连接到服务器失败,微信提示无法连接到服务器如何解决

近来发现不少网友对于微信提示无法连接到服务器如何解决这方面的讯息关注的热度颇高的,那么小编今天就针对此微信提示无法连接到服务器如何解决收集了一些相关的讯息 希望小编收集的这些讯息 能帮助到你。 1、更换接入点,重新连接网络: 2、单击手机上的M…

新手安装postgreSQL后无法连接服务器

2019独角兽企业重金招聘Python工程师标准>>> 系统:Linux Deepin 15.1 postgreSQL:9.5.1 pgAdmin Ⅲ:1.22.0 使用新立得安装postgreSQL和pgAdminⅢ之后,打开pgAdmin需新建服务器。 打开新建服务器窗口后,名称…

用云服务器架设好服务器显示无法连接

各位论坛的前辈大家好,我是刚进入这个圈子的小白,曾经这个问题困扰我两天时间,找了好多教程,都不是我想要的,我一度以为是我传奇版本的问题,所以后面解决掉之后,出个帖子给大家分享下&#xff1…

使用telnet命令,报错:无法打开主机的连接在端口23连接失败

1.页面载入出错时&#xff0c;查找问题的方法 当访问某个页面时&#xff0c;出现如下情况&#xff1a; 遇到以上情况&#xff0c;可以先通过以下的方式确认网络是否连接上 &#xff08;1&#xff09;打开cmd&#xff0c;输入命令&#xff1a;ping <ip> &#xff08;2&…

标题: 连接到服务器------------------------------无法连接到 (local)。------------------------------其他信息:在与

标题: 连接到服务器------------------------------无法连接到 (local)。------------------------------其他信息:在与 在使用SQL Server的时候无法连接的错误&#xff0c;可以参照下图 我这个问题的解决方法就是将服务器名称改一下&#xff0c;删掉原来的服务器名称栏的东西…

手机总显示连接不到聊天服务器,连接不到聊天服务器

连接不到聊天服务器 内容精选 换一换 访问CloudTable的HBase连接不上&#xff0c;出现如下所示的错误信息&#xff1a;出现该问题的可能原因为&#xff1a;网络访问不通。由于CloudTable的链接地址是内网地址&#xff0c;不是公网地址&#xff0c;不能在公网环境直接连接CloudT…

[SQL Server无法连接到服务器]标题: 连接到服务器 --------- 无法连接到 ****

标题: 连接到服务器 ---------- 无法连接到 **** 现象&#xff1a; 电脑安装好SQL可以用&#xff0c;之后&#xff08;过了几天&#xff0c;或者不久&#xff09;就出现如题错误&#xff0c;无法连接。因为此问题笔者也已重装过多次该软件…… 原因&#xff1a; 每次SQL Serve…

计算机科学研究课题申报书,教育科学研究课题立项申请书范文

教育科学研究课题立项申请书范文 分类&#xff1a;课题研究 发表时间&#xff1a;2020-04-17 16:23 教育科学研究课题立项申请书范文 教育科学研究课题立项申请书&#xff0c;都有规定的表格的&#xff0c;你需要向哪个课题管理部门递交&#xff0c;就需要向谁索要&#xff0c;…

SCI论文修稿时间延长信的申请格式-论文投稿经验总结-第4期

一、背景 如果SCI论文给定的修改周期太短&#xff0c;如何写信给期刊编辑部申请延长论文修改时间呢&#xff1f;如果不想麻烦导师&#xff0c;能否用学生(第一作者)自己的邮箱去联系编辑部呢&#xff1f;这篇博文&#xff0c;将给出答案。 二、论文修稿时间延长信格式及其回复…

【审稿意见回复和修改稿上传-流程】

审稿意见回复和修改稿上传流程 准备材料&#xff1a; Response-letter.pdfRevised-manuscript.pdfRevised-manuscript 的.tex及全部生成pdf的辅助文件 哪种页面可以上传修改稿&#xff1f; 提示&#xff1a;一般只有Submitting author的账号才可以上传&#xff0c;也有的一作…

效果最接近《羊了个羊》(卡牌堆叠游戏)的开源代码

⭐零、教程概述 效果最接近《羊了个羊》&#xff08;卡牌堆叠游戏&#xff09;的开源代码&#xff0c;有数据库和关卡。 我写的程序是指 卡牌堆叠游戏 &#xff0c;效果与羊了个羊一致。本教程有两个版本 PHP 使用 PHP H5 CSS JS MySql 实现。 H5 使用 H5 CSS JS 实现 。…

羊了个羊 通关代码思路

羊了个羊过关思路 9.16重大更新 此题放弃了&#xff0c;这题无解。出题的随机性很大&#xff0c;到最后根本凑不成三个相同的。将近百分之一的有解率。坑人的游戏 前言 肝了几遍微信小程序“羊了个羊“&#xff0c;发现有大概的解题思路&#xff0c;需要用代码敲一下子。遂先…

Qt弹出对话框“QMessageBox“的按钮名称改为中文

1.QMessageBox 用默认的QMessageBox弹出的按钮都是英文状态&#xff0c;可以通过下面两种方式更改按钮名称,&#xff0c;通常tr(“xx”)都是设置英文&#xff0c;通过翻译设置为中文。 实现效果: 实现代码: void QTestWidget::on_pushButton_ShowMsgBox_clicked() {QMessage…

2021年全球及中国旅游产业发展现状及趋势分析[图]

一、全球旅游人次 2021年在主要经济体持续宽松的财政和货币政策以及全球疫苗生产和接种加速等因素的共同促进下&#xff0c;全球旅游经济活动呈明显复苏之势。然而全球旅游经济的复苏步伐依然较为缓慢。2021年全球旅游总人次&#xff08;含国内旅游人次和国际旅游人次&#xff…

2021年国内旅游总人次、旅游总收入及旅游业未来发展趋势分析[图]

旅游指为了休闲、商务或其他目的离开他她们惯常环境&#xff0c;到某些地方并停留在那里&#xff0c;但连续不超过一年的活动。旅游目的包括休闲、娱乐、度假、探亲访友、商务、专业访问、健康医疗、宗教/朝拜等。 旅游分类 资料来源&#xff1a;文化和旅游部、智研咨询整理 …

GMO Research 2022年旅游调查:旅游业有望强劲增长

GMO Research (TOKYO: 3695)最近进行的一项旅行调查显示&#xff0c;随着边境再次开放&#xff0c;亚洲正在逐渐恢复正常的旅行模式。尽管该地区仍没有达到疫情前水平&#xff0c;旅行者仍持谨慎态度&#xff0c;但他们对海外旅行的兴趣显著增加。 为了解旅行模式和旅行意愿&a…

业务数据分析最佳案例!旅游业数据分析!⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/388 &#x1f4e2; 声明&#xff1a;版权所有&#xff0c;转…