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

AcWing 24:机器人的运动范围 ← BFS、DFS

【题目来源】
https://www.acwing.com/problem/content/description/22/


【题目描述】
地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼n−1。
一个机器人从坐标 (0,0) 的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。
但是不能进入行坐标和列坐标的数位之和大于 k 的格子。
请依次输入k,m,n,问该机器人能够达到多少个格子?

注意:0<=m<=50,0<=n<=50,0<=k<=100

【算法分析】
◆DFS算法模板:
https://blog.csdn.net/hnjzsyjyj/article/details/125801217

void dfs(int step){判断边界{输出解 }尝试每一种可能{满足check条件{标记继续下一步:dfs(step+1)恢复初始状态(回溯的时候要用到)}}
}

◆BFS算法模板:https://blog.csdn.net/hnjzsyjyj/article/details/118736059

助记:建-入-量:头-出-入”。其中,“建-入-量:头-出-入”各字的解析如下:
建:建队
入:入队
量:队中元素个数。作为while循环的条件。
头:队头
出:出队
入:入队

一个记忆场景,“小猫咪在好的洞口,想洞。先用胡子过洞口大小后,然后用头出入洞”。

【算法代码:DFS】

#include <bits/stdc++.h>
using namespace std;const int maxn=105;
int flag[maxn][maxn];
int sum=0;int dfs(int x,int y,int k,int m,int n) {if(flag[x][y]==1 || x>=m || y>=n || (x/10+x%10+y/10+y%10)>k) return 0;flag[x][y]=1;sum=dfs(x+1,y,k,m,n)+dfs(x,y+1,k,m,n)+1;return sum;
}int movingCount(int k,int m,int n){for(int i=0;i<m;i++){for(int j=0;j<n;j++){flag[i][j]=0;}}return dfs(0,0,k,m,n);
}int main(){int k,m,n;cin>>k>>m>>n;cout<<movingCount(k,m,n)<<endl;return 0;
}/*
in:5 0 0
out:0in:7 4 5
out:20in:18 40 40
out:1484
*/

【算法代码:BFS】

#include <bits/stdc++.h>
using namespace std;const int maxn=105;
int flag[maxn][maxn];
int sum=0;int movingCount(int k,int m,int n) {if(m==0 || n==0) return 0; //very importantfor(int i=0; i<m; i++) {for(int j=0; j<n; j++) {flag[i][j]=0;}}queue<pair<int,int>> q;q.push({0,0});flag[0][0]=1;int dx[]= {0,0,-1,1};int dy[]= {-1,1,0,0};while(!q.empty()) {auto t=q.front(); //pair<int,int> t=q.front();q.pop();int x=t.first;int y=t.second;sum++;for(int i=0; i<4; i++) {int nx=x+dx[i];int ny=y+dy[i];if(nx<0 || ny<0) continue;if(flag[nx][ny]==1 || nx>=m || ny>=n || (nx/10+nx%10+ny/10+ny%10)>k) continue;q.push({nx,ny});flag[nx][ny]=1;}}return sum;
}int main() {int k,m,n;cin>>k>>m>>n;cout<<movingCount(k,m,n)<<endl;return 0;
}/*
in:5 0 0
out:0in:7 4 5
out:20in:18 40 40
out:1484
*/




【参考文献】
https://blog.csdn.net/qq_40184885/article/details/89483505
https://www.cnblogs.com/wzw0625/p/12731031.html




 

http://www.lryc.cn/news/109227.html

相关文章:

  • RF手机天线仿真介绍(一):金属边框天线和LDS天线
  • 动手学深度学习—深度学习计算(层和块、参数管理、自定义层和读写文件)
  • Pytest学习教程_测试报告生成pytest-html(三)
  • 模块化原理:source-map
  • 【C++】开源:ncurses终端TUI文本界面库
  • C语言的_Bool类型
  • 【python爬虫】获取某一个网址下面抓取所有的a 超链接下面的内容
  • AutoDL从0到1搭建stable-diffusion-webui
  • 手动调整broker扩容后的旧topic分区
  • 【LeetCode-简单】剑指 Offer 25. 合并两个排序的链表(详解)
  • Java版工程行业管理系统源码-专业的工程管理软件-em提供一站式服务
  • 【Spring】简化事件的使用,Spring提供了2种使用方式
  • 探究Spring事务:了解失效场景及应对策略
  • Maven Manifold 条件编译
  • 4.数组与基本数学函数
  • python与深度学习(十六):CNN和宝可梦模型二
  • PTA 1030 Travel Plan
  • MFC、Qt、WPF?该用哪个?
  • 使用logback记录日志
  • 企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理) em
  • 【安装】XMind2022XMind2020安装教程(资源)
  • Windows下QT Creator安装MinGW 32bit编译器
  • Emacs之解决键值绑定冲突问题(一百二十三)
  • 瞄准产业应用,大模型加持的深兰科技AI虚拟数字人落地业务场景
  • 【网络基础进阶之路】基于MGRE多点协议的实战详解
  • Spark、RDD、Hive 、Hadoop-Hive 和传统关系型数据库区别
  • [运维]python 启用http 文件服务
  • electron-builder 打包 exe 异常错误集锦
  • 14-5_Qt 5.9 C++开发指南_基于HTTP 协议的网络应用程序
  • Kotlin委托