首页 > 其他分享 >dfs的return时机问题

dfs的return时机问题

时间:2024-03-18 11:24:20浏览次数:15  
标签:cnt return int dfs del 时机 dp

题目链接
错误代码的 \(dfs\) 方式:


void dfs(int u, int cnt)
{
    if(u == n)  return ;
    if(n - u + cnt < m)    return ;
    if(cnt == m)    // 再往下dfs没有意义了,剪枝
    {
        dp();
        return ;
    }
    
    dfs(u + 1, cnt);    
    del[u] = true;      
    dfs(u + 1, cnt + 1);
    del[u] = false;
}

在这份代码中,我们将 if(cnt==m) 的判断放在了 if(u == n)if(n - u + cnt < m) 之后,这就会导致一个问题,那就是当某次 \(dfs\) 同时满足 cnt==mu==n 时,会直接先 \(return\) 掉,而不会执行 dp(),从而漏解

正确的做法应该是,在递归当中 \(return\) 时,先 \(return\) 有解的情况,确保走到无解 \(return\) 语句时,一定不会有解。
正确的 \(dfs\) 代码

void dfs(int u, int cnt)
{
    if(cnt == m)    // 再往下dfs没有意义了,剪枝
    {
        dp();
        return ;
    }
    
    if(u == n)  return ;
    if(n - u + cnt < m)    return ;
    
    dfs(u + 1, cnt);    
    del[u] = true;      
    dfs(u + 1, cnt + 1);
    del[u] = false;
}

标签:cnt,return,int,dfs,del,时机,dp
From: https://www.cnblogs.com/ALaterStart/p/18079946

相关文章

  • HDFSDATANODE数据传输详解
    本文主要阐述datanode中一个socket连接接收字节流的构成,帮助datanode的接收与处理数据。注意hadoop版本为3.1.1。写在前面Datanode本质上也是TCPServer,一般的TCPServer接到客户端请求以后会分配一个线程处理,对于Datanode而言,这个线程可以叫做Op处理连接。每个OP连接会多次和客户......
  • 122. 买卖股票的最佳时机 IIc
    intmax(inti,intj){if(i>j)returni;returnj;}intmaxProfit(int*prices,intpricesSize){int**dp=(int**)malloc(sizeof(int*)*pricesSize);for(inti=0;i<pricesSize;i++)dp[i]=(int*)malloc(sizeof(int)*2);dp[0][0]=0,dp[0][......
  • 有向图的DFS(c++题解)
    题目描述给定一个有向图(不一定连通),有N个顶点,M条边,顶点从1..N依次编号,求出字典序最小的深度优先搜索顺序。输入格式第1行:2个整数,N(1≤N≤200)和M(2≤M≤5000)接下来M行,每行2个整数I,J,描述一条边从顶点I指向顶点J输出格式仅一行,一个顶点编号序列,表示字典序最小的深度优先搜索......
  • <DFS剪枝>数字王国之军训排队
    其实就是将搜索过程一些不必要的部分直接剔除掉。剪枝是回溯法的一种重要优化手段,往往需要先写一个暴力搜索,然后找到某些特殊的数学关系,或者逻辑关系,通过它们的约>束让搜索树尽可能浅而小,从而达到降低时间复杂度的目的。示例:分析:n->[1,10],数据范围并不是很大,我们可以......
  • 图论:DFS与BFS
    目录1.DFS(图论)1.1.DFS过程1.2.应用2.BFS(图论)2.1.BFS过程2.2.应用2.3.双端队列BFS实现2.4.优先队列BFS(堆优化Dijkstra算法)1.DFS(图论)DFS全称是,中文名是深度优先搜索,是一种用于遍历或搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。广义上的DFS:DF......
  • 猫头虎分享已解决Bug || 分布式文件系统问题(Distributed File System Issue):DFSUnavail
    博主猫头虎的技术世界......
  • 蓝桥杯练习系统—瓷砖铺放 dfs
    问题描述有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?例如,长度为4的地面一共有如下5种铺法:4=1+1+1+14=2+1+14=1+2+14=1+1+24=2+2编程用递归的方法......
  • Hadoop大数据应用:Linux 部署 HDFS 分布式集群
    目录  一、实验1.环境2.Linux部署HDFS分布式集群3.Linux使用 HDFS文件系统二、问题1.ssh-copy-id报错2.如何禁用sshkey检测3.HDFS有哪些配置文件4.hadoop查看版本报错5.启动集群报错6.hadoop的启动和停止命令7.上传文件报错8.HDFS使用命令  ......
  • HDFSRPC协议详解
    本文主要阐述HDFSRPCserver端一个socket连接接收字节流的构成,帮助读者理解HDFSRPC协议。注意hadoop版本为3.1.1。写在前面关于proto写入和读取,使用writeDelimitedTo和read,应该是通用的方式,不作过多的介绍。处理rpc各种情况以后server都会使用统一的应答格式(包含错误与正确),......
  • 洛谷 P2730 魔板 题解 DFS(广度优先搜索)
    题目背景在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板。这是一张有 8 个大小相同的格子的魔板:12348765题目描述我们知道魔板的每一个方格都有一种颜色。这 8 种颜色用前 8 个正整数来表示。可以用颜色的序列来表示一种魔板状态,规定从魔板的左......