当前位置: 首页 > 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+并查集

栅栏问题

 

黄金图形

 

切断圆环链

 

 

相关文章:

  • YOLOv8 实战指南:如何实现视频区域内的目标统计与计数
  • database disk image is malformed 的解决方法
  • 第十三章:预处理
  • JavaScript es6 语法 map().filter() 链式调用,语法解析 和常见demo
  • 2025年数字经济与绿色金融国际会议:智能金融与可持续发展的创新之路
  • C++容器进阶:深入解析unordered_map与unordered_set的前世今生
  • 《智能医学》征稿通知:7天可见刊,专科及以上可发表
  • 极坐标系下的极径 r 表示点到原点的距离 大于等于0
  • 实测,大模型谁更懂数据可视化?
  • 十二、FTP服务器配置与应用
  • LeetCode Hot100(矩阵)
  • ADB安装及使用
  • Ubuntu系统下Docker部署Dify保姆级教程:实现内网穿透远程访问
  • PostgreSQL 备份与恢复策略
  • 架构意识与性能智慧的双重修炼
  • Pytorch的梯度控制
  • Pinia Plungin Persistedstate
  • 长春CCPC邀请赛
  • [Redis] Redis:高性能内存数据库与分布式架构设计
  • unity—特效闪光衣服的设置
  • 做微信号公众号用网站还是App/网络营销产品策略分析
  • 网站后台代码/怎么找专业的营销团队
  • 字体 安装到wordpress/广州网站优化方案
  • 网上拿货做哪个网站好/郑州seo技术博客
  • 紫金保险车险官方网站/商丘优化公司
  • 做黑彩网站/今日国内新闻最新消息10条新闻