1.【力扣刷题】合并两个有序链表2.【力扣】旋转链表3.【力扣】删除链表中的结点4.【力扣】反转链表II5.【力扣】分隔链表6.【力扣】删除排序链表中的重复元素II7.【洛谷】奖学金(结构体排序)8.【洛谷】明明的随机数(双指针去除重复元素)9.【洛谷】求第k小的数字(分治算法)10.【洛谷】阶乘之和(高精度运算)11.【洛谷】闰年12.【洛谷】数的性质13.【洛谷】虫子吃苹果14.【力扣】奇偶链表15.【力扣】不同路径II(动态规划)16.【力扣】数楼梯(动态规划)(看来高精度不学不行了)17.【力扣】斐波那契数列(动态规划入门)18.【力扣】最大子数组和(贪心)19.【力扣】摆动序列(贪心)20.【力扣】排列问题(回溯法)(去重)21.【力扣】排列问题(回溯法)(memset函数初始化数组)22.【力扣】非递减子序列23.【力扣】子集II(回溯法)(排序函数的一种隐藏用法?)24.【力扣】复原IP地址(回溯法)(分割问题)25.【力扣】分割回文串(回溯法)26.【力扣】组合总和3(组合的去重)27.【力扣】组合总数(回溯法)28.【力扣】电话号码的组合(回溯法)29.【力扣】求组合(回溯算法)30.【力扣】括号匹配(栈的应用)31.【力扣】组合总数(另一种整数溢出)32.【CUMTOJ】法师康工人(代码细节控制)33.【代码随想录】零钱兑换34.【代码随想录】零钱兑换II(关于组合与排列的区别)35.【代码随想录】完全背包36.【力扣】岛屿数量(体会一下dfs和bfs思路的实质)
37.【代码随想录】广度优先搜索
38.【代码随想录】深度优先搜索39.【力扣】重新安排行程(很难的回溯题)(未完待续)40.【力扣】零和一(不是多重背包)41.【力扣】最长公共子序列(动态规划)(还是得学套路才能会做)42.【力扣】目标和(新鲜的01背包题)43.【力扣】分割等和子集(不太像01背包的01背包)44.【力扣】加油站(读题)思路分析
先前已经做过一道深度优先搜索了,可以看出,DFS比较适合求两点之间的所有路径这样的问题,因为其路径都是逐条求出的,而BFS则可能一下子求出多条路径,适合用来求最短路径。
关于BFS的过程前面已经学习过很多次了,遍历到一个节点时要先保存其所有邻接节点再继续向下遍历,一般是使用一个队列来完成。
代码模版
int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1}; // 表示四个方向
// grid 是地图,也就是一个二维数组
// visited标记访问过的节点,不要重复访问
// x,y 表示开始搜索节点的下标
void bfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x, int y) {
queue<pair<int, int>> que; // 定义队列
que.push({x, y}); // 起始节点加入队列
visited[x][y] = true; // 只要加入队列,立刻标记为访问过的节点
while(!que.empty()) { // 开始遍历队列里的元素
pair<int ,int> cur = que.front(); que.pop(); // 从队列取元素
int curx = cur.first;
int cury = cur.second; // 当前节点坐标
for (int i = 0; i < 4; i++) { // 开始想当前节点的四个方向左右上下去遍历
int nextx = curx + dir[i][0];
int nexty = cury + dir[i][1]; // 获取周边四个方向的坐标
if (nextx < 0 || nextx >= grid.size() || nexty < 0 || nexty >= grid[0].size()) continue; // 坐标越界了,直接跳过
if (!visited[nextx][nexty]) { // 如果节点没被访问过
que.push({nextx, nexty}); // 队列添加该节点为下一轮要遍历的节点
visited[nextx][nexty] = true; // 只要加入队列立刻标记,避免重复访问
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!