搜索(DFS BFS)算法思想

DFS

常规DFS:

二叉树前序,中序,后序遍历-CSDN博客

void postorderTraversal(root)初始化一个空列表 arrfind访问总树(root,arr)return arrvoid find(temp, arr)if temp 为空return // 调用顺序由前中后序决定find递归访问左子树find递归访问右子树arr加入当前节点

DFS+回溯:

 全排列:

问题 A: 求全排列(1)(DFS(排列类))-CSDN博客

全排列的伪代码(标记,向深搜索,回溯):

void dfs(Node* node) {if (node 是已访问) {return;}标记 node 为已访问;temp.push_back(nums[i]);dfs(nextNode);  //对于 node 的每一个未访问的邻接节点 nextNode temp.pop_back(nums[i]);标记 node 为未访问;
}

 多层嵌套:

 P8650 [蓝桥杯 2017 省 A] 正则问题(dfs )-CSDN博客

def calculate_expression_length():length = 0while True:ch = read_next_character()if ch is None:  # 结束条件,适用于字符串结束return lengthif ch == 'x':length += 1elif ch == '(':length += calculate_expression_length()  # 进入子表达式的递归计算elif ch == ')':return length  # 结束当前递归层次elif ch == '|':length = max(length, calculate_expression_length())  # 开始新的选项计算,并与之前的长度比较

DFS+并查集: 

问题 C: Oil Deposits(DFS+类并查集)-CSDN博客

统计油田数量伪代码:

void dfs(x,y){for i in range(next[i][]):(x,y)向周围八个位置延伸(x1,y1)if (x1,y1) == @:(x1,y1) == *      // 标记dfs(x1,y1)
}

P1141 01迷宫(dfs+染色联通块)-CSDN博客

main()对于每个矩阵中的点 (i, j)如果 visit[i][j] 未标记标记 visit[i][j] 为当前联通块 kDFS探索(i, j)更新联通块 k 的大小为 n        // item[k]对应k个联通块大小k++, 重置 n 为 1void DFS(x, y)(x,y)->四个方向延伸(nx,ny)如果 (nx, ny) 在矩阵范围内 且 map[x][y] ≠ map[nx][ny] 且 visit[nx][ny] 未标记标记 (nx,ny) 为当前联通块 k增加当前联通块的大小 n++DFS(nx, ny)

DFS+断点划分:

P8599 [蓝桥杯 2013 省 B] 带分数(dfs+全排列+断点判断)_洛谷p8599 [蓝桥杯 2013 省 b] 带分数java-CSDN博客 Note:        target=a+b/c        (a,b,c分别由1~9的不同数字组成)

function dfs(position):if position == 9:  # 如果已经填完所有位置# 根据当前排列更新答案returnfor i from 1 to 9:  # 尝试每一个数字if not visited[i]:  # 如果数字i没有被访问过# 标记数字i为已访问arr[position] = i  # 在当前位置放置数字idfs(position + 1)  # 移动到下一个位置# 回溯,标记数字i为未访问function check_condition():# 将arr数组的不同段转换成数字并检查是否满足(l - a) * c == b的条件# 如果条件满足,则增加ans的值

BFS:

保证最短路径:在寻找最短路径问题中,BFS 能够保证一旦找到目标节点,该路径就是最短的。层级遍历:这意味着首先访问距离起点最近的节点,然后依次访问距离逐渐增加的节点。

所以:首次到达任一节点的路径肯定是从起点到该节点的最短路径。

常规BFS:

问题 R: 胜利大逃亡(bfs)-CSDN博客

问题 N: A strange lift(BFS)-CSDN博客

function bfs(x, y, z, T):初始化队列arr将起点{0,0,0,0}加入队列标记起点为已访问while 队列不为空:取出队列首节点为currentif current是终点且val <= T:清空队列输出current.val并返回for 每个可能的移动方向:计算新位置new_posif new_pos有效且未访问且不是墙:标记new_pos为已访问new_pos.val = current.val + 1将new_pos加入队列输出-1  # 没有找到有效路径

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

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

相关文章

TensorFlow学习之:深度学习基础

神经网络基础 神经网络是深度学习的核心&#xff0c;它们受人脑的结构和功能启发&#xff0c;能够通过学习大量数据来识别模式和解决复杂问题。神经网络的基本工作原理包括前向传播和反向传播两个阶段。 前向传播&#xff08;Forward Propagation&#xff09; 前向传播是神经…

php 获取行政区域

记录&#xff1a;php获取四级行政区域&#xff0c;拉取高德接口数据 API接口文档&#xff1a; https://lbs.amap.com/api/webservice/guide/api/district 获取API <?php /*** 服务器接口类*/ namespace queryAreaInfo;class queryArea{//发送private function sendData($…

全国水科技大会 免费征集《水环境治理减污降碳协同增效示范案例》

申报时间截止到2024年4月15日&#xff0c;请各单位抓紧申报&#xff0c;申报条件及申报表请联系&#xff1a;13718793867 围绕水环境治理减污降碳协同增效领域&#xff0c;以资源化、生态化和可持续化为导向&#xff0c;面向生态、流城、城市、农村、工业园区、电力、石化、钢…

在VsCode中写vue的css,代码提示一直不出现或提示错误

在我们vue项目正常写css样式&#xff0c;便会出现一下提示&#xff0c;如&#xff1a; 但有时无提示&#xff0c;那么这种情况有以下几种解决方案 观察Vscode插件是否正常 Vetur和Vue - Official是否安装(Vue - Official的前身就是Volar) 安装了检查是否最新版本 确保你的s…

.Net6 使用Autofac进行依赖注入

一、背景 刚接触.net 6&#xff0c;记录一下在.net6上是怎么使用Autofac进行动态的依赖注入的 二、注入方式 1、新建一个webapi项目&#xff0c;框架选择net 6 2、引用Nuget包---Autofac.Extensions.Dependency   3、在Program.cs上添加如下代码 //依赖注入 builder.Host.Us…

el-table 设置固定列导致行错位的解决方案

element 官方给出的解决办法是使用doLayout&#xff0c;使用doLayout重新加载一下table就好了。 updated() {// tableRef是表格的ref属性值if (this.$refs.tableRef&& this.$refs.tableRef.doLayout) {this.$refs.tableRef.doLayout();}},调整前后效果对比&#xff1a…

lua学习笔记14(协程的学习)

print("*****************************协程的学习*******************************") --创建1 coroutine.create(function()) 使用1 coroutine.resume(co) -- 创建2 co2coroutine.wrap(fun) 使用2 co2() --协程的挂起函数 coroutine.yield() --协程的状态 --c…

跨学科高手揭秘:仿真技术如何改变工程世界

编辑 / 木子 审核 / 朝阳 “在高铁上睡觉&#xff0c;最大的噪音不是来自车轮与铁轨的摩擦声&#xff0c;也不是汽笛的轰鸣&#xff0c;而是巨大的‘嘶嘶’声——那是我大学时期做实验发出的声音。”12月9日&#xff0c;中国科学技术大学2024届毕业生郭骞在“伟骅科技”公众号…

构建第一个ArkTS之创建自定义组件

在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑与UI分离&#xff0c…

vue中使用use引入的svg怎么添加title

项目框架&#xff1a; vue2 使用场景&#xff1a; 我们项目中的svg文件比较多&#xff0c;每个都copy里面的svg代码的话&#xff0c;会造成需要写很多个vue文件&#xff0c;于是乎当时采用了use的方式引入了svg文件 代码如下&#xff08;当然中间省去了其他步骤&#xff0c…

4.19号驱动

1. ARM裸机开发和Linux系统开发的异同 相同点&#xff1a;都是对硬件进行操作 不同点&#xff1a; 有无操作系统 是否具备多进程多线程开发 是否可以调用库函数 操作地址是否相同&#xff0c;arm操作物理地址&#xff0c;驱动操作虚拟地址 2. Linux操作系统的层次 应用层…

(2022级)成都工业学院数据库原理及应用实验二:CASE工具关系模型建模

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 PowerDesigner 16.1 实验要求 某医院一个门诊部排班管理子系统涉及如下信息&#xff1a; 若干科室&a…

Echarts+vue-baidu-map绘制行驶路线

依赖下载 首先要在Vue项目中结合vue-baidu-map和ECharts绘制行驶路线&#xff0c;需要先安装并导入相关的库 npm install vue-baidu-map echarts --save注册引入 Echarts引入详情 官网查看 import * as echarts from echarts;// 基于准备好的dom&#xff0c;初始化echarts实…

成都百洲文化传媒有限公司靠谱吗?怎么样?

随着互联网的迅猛发展&#xff0c;电子商务行业迎来了前所未有的发展机遇。在这个变革的浪潮中&#xff0c;成都百洲文化传媒有限公司凭借其深厚的行业经验和创新的服务模式&#xff0c;正逐渐成为电商服务领域的新领军者。 一、创新引领&#xff0c;塑造电商服务新标准 成都百…

VS选择数据源数据提供程序的区别

VS选择数据源数据提供程序的区别 1、用于OLE DB的.net framework 数据提供程序 OLE DB是微软提供的一种数据访问技术&#xff0c;它允许应用程序访问存储在不同类型的数据源中的数据。.NET Framework 提供了一个用于OLE DB的数据提供程序&#xff0c;允许开发人员使用ADO.NET…

Windows下docker-compose部署DolphinScheduler

参照&#xff1a;快速上手 - Docker部署(Docker) - 《Apache DolphinScheduler v3.1.0 使用手册》 - 书栈网 BookStack 下载源文件 地址&#xff1a;https://dolphinscheduler.apache.org/zh-cn/download/3.2.1 解压到指定目录&#xff0c;进入apache-dolphinscheduler-xxx-…

蓝桥杯备考随手记: 递归

递归是一种解决问题的方法&#xff0c;通过将原问题分解为更小的、相同形式的子问题来解决。在递归中&#xff0c;函数会调用自身来解决这些子问题&#xff0c;直到达到基本情况&#xff08;终止条件&#xff09;&#xff0c;然后逐层返回结果&#xff0c;最终得到整个问题的解…

vscode开发小程序项目并在微信开发者工具运行

需求&#xff1a;vscode开发uniapp之后在微信开发者工具运行&#xff0c;更改的时候微信开发者也同步更改 创建微信小程序所需插件&#xff0c;在vscode的插件管理里面安装就可以了 1.微信小程序开发工具 2.vscode weapp api 3.vscode wxml 4.vscode wechat 1.创建小程序命…

vue3的 watch

两个例子中&#xff0c;主要区别在于监视的对象不同 watch( tablelist.value, () > { console.log(tablelist.value, "tablelist"); }, { deep: true }, ); watch 监视的是 tablelist.value 的值。也就是说&#xff0c;当 tablelist.value 发生变化时&#xff0c…

[HDCTF 2023]Normal_Rsa(revenge)(素数分解)

题目&#xff1a;&#xff08;注释为分析&#xff09; from Crypto.Util.number import * #from shin import flagmbytes_to_long(bHDCTF{******}) e65537 pgetPrime(256) qgetPrime(512) rgetPrime(512) np*q*r## phi(p-1)*(q-1)*(r-1) Ppow(p,2,n)## Pp**2 piroof(P,2) Qpo…