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 ...
随机推荐
- 搭建Zookeeper、Kafka集群
搭建Zookeeper.Kafka集群 Zookeeper.Kafka集群系统环境配置 配置IP ssh root@192.168.1.190 "rm -rf /etc/machine-id ...
- JDK1.8的ConcurrentHashMap的put方法源码
一.JDK1.8的ConcurrentHashMap的put方法源码 ConcurrentHashMap 是 Java 并发包(java.util.concurrent)中的一个高性能线程安全哈希表实 ...
- symfony Fatal error: Declaration of App\DataFixtures\AppFixtures::load(Doctrine\Common\Persistence
报错: Fatal error: Declaration of App\DataFixtures\AppFixtures::load(Doctrine\Common\Persistence\Objec ...
- Bongo Cat挂机连点刷分教程(Steam版)
Bongo Cat是一个在Steam上风靡一时的游戏,通过每30分钟花费1000点击量赢取配饰并在Steam市场换取$, 这里可以用连点器刷分,最好是键盘,每30ms点击一次,点击时长30ms左右,每 ...
- B1031 查验身份证 (15 分)
描述 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5 ...
- Spring AI 1.0 正式发布!核心内容和智能体详解
在经历了八个里程碑式的版本之后(M1~M8),Spring AI 1.0 正式版本,终于在 2025 年 5 月 20 日正式发布了,这是另一个新高度的里程碑式的版本,标志着 Spring 生态系统正 ...
- 第一次blog作业
1.前言 刚接触面向对象程序设计和开始学习Java编程语言的时候,确实觉得所有的一切都很困难,所有的一切都很陌生.面对全新的概念和编程方式,感觉自己像是进入了一个完全陌生的领域,需要从头开始探索.那 ...
- 【公众号搬运】gap
.markdown-body { line-height: 1.8; font-weight: 400; font-size: 16px; word-spacing: 2px; letter-spac ...
- java原生链利用
java原生链利用 在上一个文章中我们利用Java原生链进行shiro的无依赖利用; 针对在没有第三方库的时候,我们该如何进行java反序列化; 确实存在一条不依赖第三方库的java反序列化利用链;但 ...
- 浅谈commons-collections4链
浅谈commons-collections4链 commons-collections4的背景: 由于commons-collections (3.x) 在架构设计和 API 上暴露出一些问题(例如接 ...