bfs 和 dfs + 回溯 的比较好的写法
简介
刷题经常会使用bfs 和 dfs
总结
问题, 从0,0 走到 n,m 最小花费是多少?
0, 花费2元
1, 花费1元
2, 此路不通
code dfs
void dfs(vector<vector<int> >& v, int x, int y, int money) {
if(x == n - 1 && y == m - 1) {
minMoney = min(minMoney,money);
return ;
}
for(int i=0; i<4; i++){
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if(nx < 0 || nx >= n || ny < 0 || ny >= m || v[nx][ny] == 2){
continue;
}
int oldv = v[nx][ny];
int t = v[nx][ny] == 0 ? 2 : 1;
v[nx][ny] = 2;
dfs(v,nx,ny,money + t);
v[nx][ny] = oldv;
}
return ;
}
int bfs(vector<vector<int> >& v, int x, int y) {
queue<int> q;
q.push(x * N + y);
vector<vector<int>> dis(n,vector<int>(m,INF));// dis[i][j] (0,0) -> (i,j) 的最小开销
dis[0][0] = 0;
while(!q.empty()) {
int t = q.front(); q.pop();
int cx = t / N;
int cy = t % N;
for(int i = 0;i < 4;i ++) {
int nx = cx + dir[i][0];
int ny = cy + dir[i][1];
if(nx < 0 || ny < 0 || nx == n || ny == m || v[nx][ny] == 2) continue;
int cost = v[nx][ny] == 0 ? 2 : 1;// 到 (nx,ny) 的开销
if(dis[nx][ny] > dis[cx][cy] + cost) {
// 更新
dis[nx][ny] = dis[cx][cy] + cost;
q.push(nx * N + ny);
}
}
}
return dis[n - 1][m - 1];
}
};
bfs 和 dfs + 回溯 的比较好的写法的更多相关文章
- BFS和DFS算法
昨晚刚昨晚华为笔试题,用到了BFS和DFS,可惜自己学艺不精,忘记了实现原理,现在借用大佬写的内容给自己做个提高 转自:https://www.jianshu.com/p/70952b51f0c8 图 ...
- 通俗理解BFS和DFS,附基本模板
1.BFS(宽度优先搜索):使用队列来保存未被检测的节点,按照宽度优先的顺序被访问和进出队列 打个比方:(1)类似于树的按层次遍历 (2)你的眼镜掉在了地上,你趴在地上,你总是先摸离你最近的地方,如果 ...
- 借助leetcode题目来了解BFS和DFS
广度优先和深度优先搜索 前言 看着这两个搜索的前提的是读者具备图这一数据结构的基本知识,这些可以直接百度一波就了解了.图也像树一样,遍历具有很多的学问在里面,下面我将借用leetcode的题目讲解一下 ...
- 素数环(dfs+回溯)
题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...
- NOJ 1074 Hey Judge(DFS回溯)
Problem 1074: Hey Judge Time Limits: 1000 MS Memory Limits: 65536 KB 64-bit interger IO format: ...
- HDU 1016 Prime Ring Problem(经典DFS+回溯)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU1016 Prime Ring Problem(DFS回溯)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU-4607 Park Visit bfs | DP | dfs
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...
- uva 193 Graph Coloring(图染色 dfs回溯)
Description You are to write a program that tries to find an optimal coloring for a given graph. Col ...
随机推荐
- chrome “从 Google 获取图片说明”
右键菜单"从 Google 获取图片说明"多余去掉. 设置-高级-使用硬件加速模式(如果可用)-关闭 在用户使用上firefox完胜chrome,但是firefox的开发人员工具相 ...
- Java编程--观察者(Observer)设计模式
观察者设计模式 观察者设计模式是一种行为设计模式,允许对象在其状态改变时通知其他依赖对象.它创建了一种发布者(Subject)和订阅者(Observer)之间的依赖关系.这种模式经常用于实现事件处理系 ...
- deepseek+coze实战:一键抓取百条抖音爆款视频,自动存入飞书表格
大家好,我是汤师爷~ 批量获取抖音视频文案这件事,一直有技术门槛. 很多朋友因为不懂技术,只能花钱买工具来完成这项任务. 今天我要分享一个Coze智能体的解决方案 只需输入关键词就能自动批量获取视频文 ...
- Font Awesome文档使用手册
Font Awesome 字体为您提供可缩放矢量图标,它可以被定制大小.颜色.阴影以及任何可以用CSS的样式. 使用文档:https://fa4.uihtm.com/ Font Awesome 是一套 ...
- 迭代器失效:99%的C++程序员都会踩的坑 !
大家好,我是小康. 你踩过这个坑吗?为什么我的程序明明很简单,却总是莫名其妙地崩溃! 嘿,各位 C++ 爱好者们,今天咱们聊一个几乎所有 C++ 程序员都会踩的坑--迭代器失效.无论你是刚入门的新手, ...
- 操作系统:Linux如何实现系统API
上节课,我们通过实现一个获取时间的系统服务,学习了 Cosmos 里如何建立一个系统服务接口.Cosmos 为应用程序提供服务的过程大致是这样的:应用程序先设置服务参数,然后通过 int 指令进入内核 ...
- linux与docker知识积累
0.在CentOS中,启动docker : sudo systemctl start docker 1.在 CentOS 中,要删除一个文件夹及其内容,可以使用 rm 命令的 -r 或 --recur ...
- Java stream实现list转化为map
在Stream流中将List转换为Map,是使用Collectors.toMap方法来进行转换. key和value都是对象中的某个属性值. Map<String, String> use ...
- python爬虫学习——re模块(正则表达式)
正则表达式常用操作符 . 任何单个字符 [] 字符集,对单个字符给出取值范围 [abc].[a-z] [^ ] 非字符集,对单个字符给出排除范围 [^abc] * 对前一个字符0次或无限次拓展 abc ...
- LLM 上下文长度详细介绍
1.概述 在<Token:大语言模型的"语言乐高",一切智能的基石>与<LLM 输出配置 (LLM output configuration)>这两篇博文中 ...