P1605 迷宫

题目传送门:P1605 迷宫


前言

dfs迷宫题,是一道很好的练手模板题

这道题一定要回溯!回溯!!

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int sx,sy,fx,fy;
int lx,ly;
int a[10][10]={0},ans=0;
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
void dfs(int x,int y){if(x==fx&&y==fy){ans++;return;}for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(nx<1||ny<1||nx>n||ny>m||a[nx][ny]==1)continue;a[nx][ny]=1;dfs(nx,ny);a[nx][ny]=0;}
}
int main(){ios::sync_with_stdio(false);cin>>n>>m>>t;cin>>sx>>sy>>fx>>fy;while(t--){cin>>lx>>ly;a[lx][ly]=1;}a[sx][sy]=1;dfs(sx,sy);printf("%d",ans);return 0;
}

解析

这道题有两个坑点,不把这两个坑点过了就过不了40分这一关。

1. 起点要标记上是已经走过的路

2. 一定要回溯!!!回溯!!!!!!

看一看心路历程:


02-21 20:33:55

这是第一次提交,是行云流水的敲完代码直接交的,只得了40分。

看看非ac代码(40pts):

#include<bits/stdc++.h>
using namespace std;
int n,m,t;
int sx,sy,fx,fy;
int lx[15],ly[15];
int a[10][10]={0},ans=0;
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
bool flag=true;
void dfs(int x,int y){if(x==fx&&y==fy){ans++;return;}for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(nx<1||ny<1||nx>m||ny>n||a[nx][ny]==1)continue;/*for(int i=0;i<t;i++){if(nx==lx[i]&&ny==ly[i]){flag=false;break;}}*/if(!flag)continue;a[nx][ny]=1;dfs(nx,ny);}
}
int main(){ios::sync_with_stdio(false);cin>>n>>m>>t;cin>>sx>>sy>>fx>>fy;for(int i=0;i<t;i++){cin>>lx[i]>>ly[i];a[lx[i]][ly[i]]=1;}dfs(sx,sy);printf("%d",ans);return 0;
}
//这里原点没有标记,也没有回溯

没有这两点,有其中一点也是40分,缺一不可。


然后就经历了:

期间一直在改,却一直没有加回溯。

就在想看题解时,就先下载了#2的数据:

???

于是,我就用我的代码交上去一看:

“1”?

这就有可能是没有删除标记的问题了!

于是加上a[nx][ny]=0;一看:

对了,其实就是回溯的问题。

加上去:

ok,ac了。

花了将近1个小时来调这道题,那就给大家放一个有注释的程序把....

#include<bits/stdc++.h>  
using namespace std;  int n, m, t; // 定义变量n, m分别表示网格的行数和列数,t表示要标记的障碍物数量  
int sx, sy, fx, fy; // 定义起点和终点的坐标  
int lx, ly; // 定义临时变量,用于读入障碍物的坐标  
int a[10][10] = {0}; // 定义一个10x10的网格,并初始化为0(可通行)  
int ans = 0; // 定义变量ans,用于记录从起点到终点的路径数量  int dx[4] = {0, 0, -1, 1}; // 定义水平方向上的移动增量  
int dy[4] = {1, -1, 0, 0}; // 定义垂直方向上的移动增量  // DFS函数,用于从当前位置(x, y)开始搜索到达终点的路径数量  
void dfs(int x, int y) {  if (x == fx && y == fy) { // 如果当前位置是终点  ans++; // 路径数量加1  return; // 返回上一层递归  }  for (int i = 0; i < 4; i++) { // 遍历四个方向  int nx = x + dx[i]; // 计算下一个位置的x坐标  int ny = y + dy[i]; // 计算下一个位置的y坐标  if (nx < 1 || ny < 1 || nx > n || ny > m || a[nx][ny] == 1) continue; // 如果下一个位置越界或已被标记为障碍物,则跳过  a[nx][ny] = 1; // 将下一个位置标记为已访问  dfs(nx, ny); // 递归访问下一个位置  a[nx][ny] = 0; // ←←←←←←←就是这个!!!一定要回溯!!!}  
}  int main() {  ios::sync_with_stdio(false); // 关闭C++标准输入输出流与C标准输入输出流的同步,以提高效率  cin >> n >> m >> t; // 读入网格的行数、列数和障碍物的数量  cin >> sx >> sy >> fx >> fy; // 读入起点和终点的坐标  while (t--) { // 循环t次,读入障碍物的坐标  cin >> lx >> ly; // 读入障碍物的坐标  a[lx][ly] = 1; // 将障碍物位置标记为1(不可通行)  }  a[sx][sy] = 1; // ←←←←←←←←这个也要加!!!dfs(sx, sy); // 从起点开始进行深度优先搜索  printf("%d", ans); // 输出从起点到终点的路径数量  return 0; // 程序正常结束  
}

The end.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内最全的AIGC大模型软件都是免费的,不比chatgpt香吗?我都为你准备好了,又可以提前下班了

无极低码 &#xff1a;https://wheart.cn 豆包(云雀大模型)、文心一言、悟空、星火、百度文库、360智脑、天宫AI、智谱清言(GLM大模型)、百川模型(百川智能)、日日新(商汤)、上海人工智能实验室&#xff08;书生通用大模型&#xff09;、夸克。 国内最全的AIGC大模型软件都是…

mysql 2-21

约束的分类 添加约束 查看表约束 非空约束 唯一性约束 复合的唯一性约束 只要有一个字段不重复&#xff0c;就可以添加成功 主键约束 自增列 mysql 8.0具有持久化&#xff0c;重启服务器会继续自增 外键约束 创建外键 关联必须有唯一性约束&#xff0c;或者是主键 约束等级 …

MySQL篇之undo log和redo log

一、持久化时服务器宕机 缓冲池&#xff08;buffer pool&#xff09;: 主内存中的一个区域&#xff0c;里面可以缓存磁盘上经常操作的真实数据&#xff0c;在执行增删改查操作时&#xff0c;先操作缓冲池中的数据&#xff08;若缓冲池没有数据&#xff0c;则从磁盘加载并缓存&a…

我是如何从功能测试成功转岗测试开发的?记录下我的面试经验

由于这段时间我面试了很多家公司&#xff0c;也经历了之前公司的不愉快。所以我想写一篇文章来分享一下自己的面试体会。希望能对我在之后的工作或者面试中有一些帮助&#xff0c;也希望能帮助到正在找工作的你。 一 找工作 壹&#xff0f; 我们总是草率地进入一个自己不了解…

mac拼图软件有哪些?推荐5款拼图软件

mac拼图软件有哪些&#xff1f;在数字图像处理中&#xff0c;拼图软件扮演着至关重要的角色。对于Mac用户来说&#xff0c;选择一款功能强大、操作简便的拼图软件是提升工作效率和创作体验的关键。本文将为你介绍五款优秀的Mac拼图软件&#xff0c;帮助你轻松完成图片拼接、制作…

WEB APIs (3)

事件对象 事件对象有事件触发时的相关信息&#xff0c;如点击事件中事件对象储存了鼠标点在哪个位置的信息 场景&#xff1a; 用户按下了哪个键&#xff0c;按下回车键可以发布新闻 鼠标点击了哪个元素&#xff0c;从而做哪些操作 参数e为事件对象 常用属性 type 获取当前…

如何用微软画图把1280X720的图片压缩成4:3?

最近在看20多年前的电视剧&#xff0c;视频截图是1280X720&#xff0c;比例失调。 如何压缩成4:3&#xff1f; 4 / 3 W / 720 W 720 X 4 / 3 960 打开画图&#xff0c;调整大学和扭曲&#xff08;Ctrl W&#xff09;&#xff0c;依据选择像素&#xff0c;取消保持纵横比…

【C++】类和对象---const成员,取地址及const取地址操作符重载,static成员

目录 ⭐const成员 ⭐取地址及const取地址操作符重载 ⭐static成员 ⭐概念 ⭐特性 ⭐const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何…

Nginx服务介绍与部署管理

目录 一、Nginx相关介绍 1. 概述 2. 优缺点 3. 零拷贝技术 4. I/O模型相关概念 5. 网络I/O模型 5.1 阻塞型I/O模型 5.2 非阻塞型I/O模型 5.3 多路复用I/O型 5.4 信号驱动式I/O模型 5.5 异步I/O模型 6. 事件驱动模型 7. Nginx与Apache区别 二、Nginx部署和使用 1…

哪些工具可以改变手机电脑网络IP地址?

在互联网时代&#xff0c;网络已经成为了我们日常生活中不可或缺的一部分。然而&#xff0c;随着网络的普及和技术的不断发展&#xff0c;网络安全问题也日益凸显。为了保护个人隐私和信息安全&#xff0c;我们需要了解一些工具可以改变手机电脑网络IP地址的知识。 首先&#x…

【Java面试】MQ(Message Queue)消息队列

目录 一、MQ介绍二、MQ的使用1应用解耦2异步处理3流量削峰4日志处理5消息通讯三、使用 MQ 的缺陷1.系统可用性降低:2.系统复杂性变高3.一致性问题四、常用的 MQActiveMQ:RabbitMQ:RocketMQ:Kafka:五、如何保证MQ的高可用?ActiveMQ:RabbitMQ:RocketMQ:Kafka:六、如何保…

stm32——hal库学习笔记(串口<一>)

这里写目录标题 一、数据通信的基础概念&#xff08;了解&#xff09;1.1&#xff0c;串行/并行通信1.2&#xff0c;单工/半双工/全双工通信1.3&#xff0c;同步/异步通信1.4&#xff0c;波特率1.5&#xff0c;常见的串行通信接口 二、串口(RS-232)&#xff08;熟悉&#xff09…

九州金榜|假期即将结束,如何让孩子快速进入学习状态

临近假期结束&#xff0c;很多孩子都还在沉寂在假期之中&#xff0c;很难收心安心学习&#xff0c;也是在这个时候很多家长都会头疼&#xff0c;孩子不收心就会不可避免影响学习&#xff0c;家长对此也是很无奈&#xff0c;下面九州金榜金榜家庭教育给出以下建议&#xff0c;让…

中科大郝记华教授获2024年F.W.克拉克奖

近日&#xff0c;从国际地球化学学会(Geochemical Society)获悉&#xff0c;中国科学技术大学地球和空间科学学院郝记华教授获得2024年F.W.克拉克奖&#xff08;F.W. Clarke Awards&#xff09;。 图源&#xff1a;国际地球化学学会官网 郝记华教授是首位在中国工作的获奖者。他…

什么是nginx 、安装nginx

一、 什么是nginx 1.1 nginx的概念 一款高新能、轻量级Web服务软件系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 1.2 nginx模块与作用 核心模块&#xff1a;是 Nginx 服务器正常运行必不可少的模块&#xff0c;提供错…

ARM处理器运行Windows系统的三防加固平板|亿道三防

大家好&#xff01;今天我要为大家介绍一款引人注目的三防加固平板电脑——亿道三防系列产品。它们采用高通ARM处理器&#xff0c;并能够运行Windows 11操作系统&#xff0c;给用户带来了前所未有的强大性能和多样化的应用体验。 首先&#xff0c;让我们来聊聊这款平板电脑的核…

2024最新版Redis安装使用指南

2024最新版Redis安装使用指南 Installation and Usage Guide to the Latest Redis in 2024 By JacksonML 1. 什么是Redis? The open-source, in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, an…

星河做市基金会全球DAO社区启动,为数字货币市场注入新活力

2024年的数字货币市场即将迎来一次重要的历史性时刻 — 比特币减半&#xff0c;这四年一次的事件将成为全球数字资产市场的焦点&#xff0c;预示着新一轮的牛市浪潮即将到来。在这个关键时刻&#xff0c;星河做市基金会展现出其作为区块链行业领先市值管理公司的独特魅力。 GA…

初体验 在Dell R7525 服务器 RTX 3090 安装Chat with RTX

理论上是不建议在服务器上安装消费级的显卡&#xff0c;奈何数据中心的显卡需要额外的License才能体验RTX功能或者需要修改模式的方式如 A40 是可以做切换的。 一开始安装是失败的&#xff0c;现在想起来应该是和网络是相关的&#xff0c;所有首先需要做好科学网络才行&#x…

一文了解大数据生态

大数据一词最早指的是传统数据处理应用软件无法处理的过于庞大或过于复杂的数据集。 现在&#xff0c;对“大数据”一词的使用倾向于使用预测分析、用户行为分析或者其他一些从大数据中提取价值的高级数据分析方法&#xff0c;很少用于表示特定规模的数据集。 定义 大数据是…