当前位置: 首页 > news >正文

DFS:从入门到进阶的刷题指南

目录

 

一、基础DFS:递归实现、状态标记、回溯

全排列问题

组合问题

子集问题

二、网格DFS:二维矩阵遍历、连通块计数、方向数组

岛屿数量

单词搜索

被围绕的区域

三、 记忆化DFS:动态规划+DFS,缓存中间结果

斐波那契数列(记忆化版)

滑雪

不同路径(带障碍)

四、 剪枝优化:可行性剪枝、最优性剪枝、预处理优化

N 皇后

数独求解

火柴拼正方形

五、树/图的DFS:前序/中序/后序遍历、路径搜索、回溯

二叉树路径和

二叉搜索树的范围和

图中所有路径

六、状态压缩DFS:用二进制表示状态,减少存储开销

翻转游戏 II

解数独

最短哈密尔顿路径

七、综合难题:DFS+贪心、DFS+二分、DFS+并查集

栅栏问题

黄金图形

切断圆环链


 

一、基础DFS:递归实现、状态标记、回溯

全排列问题

#include <iostream>
using namespace std;
int n;
int a[15];
bool vis[15];
void dfs(int x)
{if (x > n){for (int i = 1; i <= n; i++){printf("%5d", a[i]);}cout << endl;return;}for (int i = 1; i <= n; i++){if (!vis[i]){vis[i] = true;a[x] = i;dfs(x + 1);vis[i] = false;a[x] = 0;}}
}
int main()
{cin >> n;dfs(1);return 0;
}

组合问题

#include <iostream>
using namespace std;
int n, r;
int a[30];
void dfs(int x, int start)
{if (x > r){for (int i = 1; i <= r; i++){printf("%3d", a[i]);}cout << endl;return;}for (int i = start; i <= n; i++){a[x] = i;dfs(x + 1, i + 1);a[x] = 0;}
}
int main()
{cin >> n >> r;dfs(1, 1);return 0;
}

子集问题

#include <iostream>
using namespace std;
int n;
int a[20];
void dfs(int x)
{if (x > n){for (int i = 1; i <= n; i++){if (a[i] == 1){cout << i << " ";}}cout << endl;return;}for (int i = 1; i <= 2; i++){a[x] = i;dfs(x + 1);a[x] = 0;}
}
int main()
{cin >> n;dfs(1);return 0;
}

二、网格DFS:二维矩阵遍历、连通块计数、方向数组

岛屿数量

 

单词搜索

 

被围绕的区域

 

三、 记忆化DFS:动态规划+DFS,缓存中间结果

斐波那契数列(记忆化版)

 

滑雪

 

不同路径(带障碍)

 

四、 剪枝优化:可行性剪枝、最优性剪枝、预处理优化

N 皇后

 

数独求解

 

火柴拼正方形

 

五、树/图的DFS:前序/中序/后序遍历、路径搜索、回溯

二叉树路径和

 

二叉搜索树的范围和

 

图中所有路径

 

六、状态压缩DFS:用二进制表示状态,减少存储开销

翻转游戏

 

数独

 

最短哈密尔顿路径

 

七、综合难题:DFS+贪心、DFS+二分、DFS+并查集

栅栏问题

 

黄金图形

 

切断圆环链

 

 

http://www.xdnf.cn/news/712675.html

相关文章:

  • solidworks报错-只有合并特征才能被阵列。如果恰当,请选择实体的阵列
  • 表里不一的程序世界和物理世界
  • Linux日志管理
  • 【LangChain】
  • CAN通信波特率异常的危害
  • 用Python绘制动态爱心:代码解析与浪漫编程实践
  • 进行性核上性麻痹健康护理全指南:从症状管理到生活照护
  • 杏仁海棠花饼的学习日记第十四天CSS
  • 亡羊补牢与持续改进 - SRE 的安全日志、审计与事件响应
  • 树莓派超全系列教程文档--(52)如何启用VNC功能
  • electron安装报错处理
  • K M G T P E Z
  • ChatGPT Plus/Pro 订阅教程(支持支付宝)
  • opengauss 数据库安装主备 非om方式
  • 11 java语言执行浅析1
  • spring boot 拦截器HandlerInterceptor 不生效的原因排查
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十一)
  • Shortest path 代码
  • RV1126-OPENCV 交叉编译
  • vue发版html 生成打包到docker镜像进行发版
  • STM32F103_Bootloader程序开发05 - Keil修改生成文件的路径与文件名,自动生成bin格式文件
  • Unity3D仿星露谷物语开发55之保存游戏到文件
  • ubuntu20.04编译 pjproject-2.7.1
  • 删除并重新排队
  • Redis 主从复制中的全量拷贝机制详解
  • IBM DB2数据库管理工具IBM Data Studio
  • Ubuntu 安装 Miniconda 及配置国内镜像源完整指南
  • 源的企业级网络安全检测工具Prism X(棱镜X)
  • Linux:shell脚本常用命令
  • [智能算法]蚁群算法原理与TSP问题示例