首页 > 编程语言 >考研算法辅导课笔记:dfs

考研算法辅导课笔记:dfs

时间:2023-02-18 15:35:15浏览次数:38  
标签:辅导课 递归 是不是 dfs 枚举 对角线 皇后 考研

这节课讲解dfs,通过两个例子,全排列和八皇后

递归相对于人的大脑思考方式,比较抽象。
递归是不是把问题不断规约成子问题? 是不是很像数学归纳法?
那我们该如何学习递归问题呢? 是不是递归问题不够直观?那我们是不是可以画一个递归搜索树,让我们更容易理解过程呢。

全排列问题
画出全排列的递归搜索树,各种节点很多。那我们该怎么样处理呢?仔细观察可以发现,节点看起来很多,但是可以抽取很多共同点。
那么如何抽取(规约)呢?何如归约到一个函数里呢?
char path[];  // 使用path记录方案。
void dfs(int u) // 是不是需要知道当前在哪一层呢?那么使用u记录当前搜索到哪一层
{
  if(u==n) {} // 如果到了最后一层,直接输出,输出方案。输出是不是需要用数组记录呢?
  else 
  {
    // 没走到最后一层,是不是说明现在需要枚举当前要填什么?
    for(int i=0;i<n;i++)
      if(!st[i]) // 是不是需要保证和前面的没有重复呢?
      {
        path[u] = s[i]; // 填上第i个字母
        st[i] = true; // 标记第i个字母
        dfs(u+1); // 是不是可以进入下一层了?
        st[i] = false; // 回溯的时候,记得恢复现场
      }
  }
}
八皇后问题
问题描述:一个8*8大小的国际象棋棋盘,放有八个皇后,让八个皇后处于彼此不能相互攻击的范围,求一共有多少种摆放方式?
解决方法:暴力搜索。 那么该如何暴力搜索呢? 如果很直接的枚举每一个格子,放或者不放两种状态,你会发现计算量太大。
这个时候,该考虑如何优化呢? 考虑宏观的特性,每个皇后是不是不能放在同一行,那么是不是说明每一行都要有而且只有一个皇后。
这样思考,会发现问题的复杂度会大大降低。
那么,现在的思路就是枚举第一行皇后的方法,然后深搜。简化来看,特别像全排列--即枚举八列,每一列不能重复。现在是不是问题解决了大半呢。
现在唯一需要考虑的是,如何满足皇后也都不再同一对角线上。
这里正对角线 2n-1条, 反对角线2n-1条. 想办法找到格子和对角线之间的转化关系。

上面的图片,是不是一种映射方式(b=x+y与 b=x-y)?是不是同一条对角线上的点,都可以用这个函数表达?
所以这样来看,这道题相对来说很容易解决了。

标签:辅导课,递归,是不是,dfs,枚举,对角线,皇后,考研
From: https://www.cnblogs.com/spock12138/p/17132083.html

相关文章

  • 【DFS&并查集】岛屿数量
    经典的dfs/bfs问题,给一个起点开始搜索,满足条件则继续调用dfs/bfs从没有访问过的某个陆地出发,将所有能到达的陆地的状态都记录为已访问。下次出发不从已访问的陆地出发,每次......
  • 经典算法之深度优先搜索(DFS)
    一、前言本文介绍了经典搜索算法:深度优先搜索(DFS)两个小故事:岳云鹏的相声:孙越的爸爸带他参观家里面的聚宝盆,走到了一个密室门前,密室的门上上了一把锁,孙越的爸爸身上带......
  • HDFS优化方案
    一、短路本地读取(ShortCircuitLocalReads)1.1 背景在HDFS中,不管是LocalReads(DFSClient和Datanode在同一个节点)还是RemoteReads(DFSClient和Datanode不在同......
  • HDFS数据(跨集群)迁移
    一、数据迁移使用场景1.冷热集群数据同步、分类存储2.整体数据整体搬迁3.数据准实时同步(备份)二、考量因素1.网络传输带宽及时间,是否会影响现有业务2.性能,单机?多......
  • HDFS读写数据流程
    文件写入(1)HDFSClient上传文件到集群,HDFSClient会创建本地的分布式文件系统(DistributedFileSystem),向集群NameNode请求上传文件(2)NameNode检查目录树是否允许创建文件,检查......
  • 蓝桥杯备战日志(Python)16-玩具蛇&序列个数-(DFS&枚举、递归)
    玩具蛇原题小蓝有一条玩具蛇,一共有16节,上面标着数字1至16。每一节都是一个正方形的形状。相邻的两节可以成直线或者成90度角。小蓝还有一个4×4的方格盒子,用于存放......
  • HDFS文件块
    知识点补充HDFS优缺点:优点(1)高容错性。节点存放的副本比较多。(2)适合处理大数据。GB、TB、PB级别的数据都可以处理。(3)可以构建在廉价的机器上,通过多副......
  • hdfs操作——hdfs的shell命令和hdfs的JavaAPI操作
    hdfs解决hadoop海量数据的存储。shell命令(所有hadoopfs可由hdfsdfs代替)(1)在hdfs上创建目录hadoopfs-mkdir目录名(2)本地文件的上传hadoopfs-copyFromLoc......
  • 考研人一定要知道的资料打印小技巧
    以前上大学,考研的人不太多,大多数的毕业生都是毕业之后直接就业的,但是现在考研是越来越热了,很多大学生都会选择考研继续深造。不过对于很多考研党来说,自己考研的经费都是很......
  • 深度优先搜索算法-dfs讲解
    迷宫问题有一个迷宫:S**.....***T(其中字符S表示起点,字符T表示终点,字符*表示墙壁,字符.表示平地。你需要从S出发走到T,每次只能向上下左右相邻的位置移动,不能走出地图,也......