洛谷 P1605 USACO迷宫 (详细解析和AC代码)【深搜+打表】

P1605 迷宫

  • 前言
  • 题目
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
    • 题目分析
    • 注意事项
  • 代码
  • 后话
    • 王婆卖瓜
  • 题目来源

前言

没什么好说的深搜yyds!直接深搜一遍过!

题目

题目描述

给定一个 N × M N \times M N×M 方格的迷宫,迷宫里有 T T T 处障碍,障碍处不可通过。

在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。

输入格式

第一行为三个正整数 N , M , T N,M,T N,M,T,分别表示迷宫的长宽和障碍总数。

第二行为四个正整数 S X , S Y , F X , F Y SX,SY,FX,FY SX,SY,FX,FY S X , S Y SX,SY SX,SY 代表起点坐标, F X , F Y FX,FY FX,FY 代表终点坐标。

接下来 T T T 行,每行两个正整数,表示障碍点的坐标。

输出格式

输出从起点坐标到终点坐标的方案总数。

样例 #1

样例输入 #1

2 2 1
1 1 2 2
1 2

样例输出 #1

1

提示

对于 100 % 100\% 100% 的数据, 1 ≤ N , M ≤ 5 1 \le N,M \le 5 1N,M5 1 ≤ T ≤ 10 1 \le T \le 10 1T10 1 ≤ S X , F X ≤ n 1 \le SX,FX \le n 1SX,FXn 1 ≤ S Y , F Y ≤ m 1 \le SY,FY \le m 1SY,FYm

题目分析

  这道题就是典型的搜索,虽然加了一个障碍,但是其实没啥影响,顶多多一个if就完了,这边虽然我已经理解了,但还是给大家讲一下深搜的思路(以本题为例)
  首先深搜是递归的,你要先传入一个值作为首次的参数,这个一般都是起始点和0或者1这样。dfs(sx,sy);
  然后就是一个判断,这个判断需要放在整个dfs的最前面,来判断是否到了终止条件,比如无路可走,到达终点或者说是完成目标,相当于递归的终点。这个判断不准确也是导致dfs死循环的重要原因之一。

	if(x==fx&&y==fy) {total++;return;}

  接着就是主体部分,根据本层dfs传来的参数,将遍历所有可能的情况(上下左右)寻找可行点,一般还会加上边界,访问判断(没有设置已访问也容易导致死循环)等,这题还需要判断陷阱,不过跟前面合在一起了。然后遇到可行点就标记访问,进入下一层,也就是新的点的dfs,退出来时再恢复一下现场,还原为未访问。

			map[newx][newy]=1;//标记为已访问dfs(newx,newy);map[newx][newy]=0;//恢复现场 

注意事项

1.记得起始点也要标记为访问过,否则会多几条路。
2.陷阱在这里判断跟判断访问差不多
3.记得恢复现场

代码

一遍过,说实话还是挺喜欢做这种搜索的,深搜yyds!

耶

#include<iostream>using namespace std;int n,m,t,sx,sy,fx,fy,a,b,total=0;
int map[500][500]= {0};
int dx[4]= {1,0,-1,0};
int dy[4]= {0,-1,0,1};
struct point {int x,y;
} trap[12];
void dfs(int x,int y)
{if(x==fx&&y==fy) {total++;return;}for(int i=0; i<4; i++) {int newx=x+dx[i],newy=y+dy[i];if(newx>=1&&newx<=n&&newy>=1&&newy<=m) if(map[newx][newy]==0)//包括不是陷阱以及没有访问过 {map[newx][newy]=1;//标记为已访问dfs(newx,newy);map[newx][newy]=0;//恢复现场 }}
}
int main()
{cin>>n>>m>>t;cin>>sx>>sy>>fx>>fy;for(int i=0; i<t; i++) {cin>>a>>b;map[a][b]=-1;//表示陷阱}map[sx][sy]=1;dfs(sx,sy);cout<<total<<endl;return 0;
}

后话

王婆卖瓜

感觉有收获或者想跟上我的进度刷题的,可以点个关注,或者点赞收藏评论都可以!

题目来源

USACO
洛谷链接

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

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

相关文章

java: Internal error in the mapping processor: java.lang.NullPointerException

启动java项目出错&#xff0c;其他人工程没有问题&#xff0c;别着急。 java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.j…

自动化支付宝小程序UI测试,AirtestProject和pytest助你一臂之力!

一&#xff0c;前言 1&#xff0c;背景 因公司业务需要做支付宝小程序的UI自动化测试&#xff0c;于是在网上查找小程序的自动化资料&#xff0c;发现微信小程序是有自己的测试框架的&#xff0c;但几乎找不到支付宝小程序UI自动化测试相关的资料。白piao失败&#xff0c;那就…

Salesforce原生ERP产品 vs. 集成:如何选择?

Salesforce允许企业管理所有的客户交互。随着Salesforce平台的日渐成熟&#xff0c;企业已经能够获取成倍的收益。会计解决方案和其他ERP工具尤其契合&#xff0c;客户数据不会碰壁&#xff0c;可以在服务交付和客户成功、发票和账单、收入确认和续订的过程中继续前进。 一些…

TensorRT之LeNet5部署(wts方式)

文章目录 前言一、TensorRT1.TensorRT简介2. TensorRT工作流程 二、LeNet-5 部署1.Pytorch实现网络模型2.WTS文件保存权重数据3.TensorRT构建阶段( TensorRT 模型文件)&#x1f34e;创建Builder&#x1f349;创建Network&#x1f352;使用API构建网络&#x1f345;优化网络&…

ubuntu安装远程桌面

ubuntu安装远程桌面 xrdp远程桌面访问 #用windows远程桌面连接成功,只能用root用户,用普通用户连接是灰色 sudo apt install xrdp systemctl status xrdpsystemctl stop xrdp解决普通用户连接是灰色 参考链接: https://blog.csdn.net/leegh1992/article/details/51160864 s…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条&#xff0c;无论你拖拽滚动条&#xff0c;选中滚动条之后按键盘…

Stable Diffusion绘画系列【4】:可爱盲盒风人物

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

计算机系统漫游

编译系统 预处理&#xff08;Preprocessing&#xff09;&#xff1a; 预处理器根据源代码中的预处理指令&#xff0c;如#include和#define等&#xff0c;将源代码转换为另一份源代码。预处理器的输出通常会保存在hello.i的文件中。编译&#xff08;Compilation&#xff09;&…

光伏电站开发流程

随着人们对可再生能源的关注度不断提高&#xff0c;光伏电站的开发流程也变得越来越重要。光伏电站是一种利用太阳能发电的设施&#xff0c;它可以有效地减少化石能源的消耗&#xff0c;同时也可以为环保事业做出贡献。 首先&#xff0c;要进行光伏电站的开发&#xff0c;需要选…

MindStudio学习记录三:推理应用开发 acl mindx sdk

1.推理应用流程 1.1.创建工程 1.2.模型转换 1.3代码开发 1.3.1ACL代码 1.3.2MindX SDK开发 可视化模块化设计 中间的图片与处理 是基于AIPP的可视化处理 1.5.编译 交叉编译 1.6.运行与调试 1.7 调优工具 profiling性能分析 2.开发举例 resnet-50 2.1 准备工程 2.2.准备模型…

必备极速下载工具 — aria2

必备极速多线程并行下载工具 — aria2 aria2 是一款免费开源跨平台且不限速的多线程下载软件&#xff0c;其优点是速度快、体积小、资源占用少&#xff1b;支持 HTTP / FTP / BT / Magnet 磁力链接等类型的文件下载&#xff1b;支持 Win、Mac、Linux 系统&#xff0c;甚至在树莓…

学习笔记:如何分析财务报表

其实财务报表分析最核心的东西&#xff0c;是通过财务报表这个结果&#xff0c;由果推因&#xff0c;找出造成这个结果的原因。 会计是商业的语言 首先第一个问题是——会计是商业的语言&#xff0c;这是会计的根本。 什么叫“语言”&#xff0c;就是可以通过它进行交流。比如…