P1189 SEARCH—搜索
将这题加进来的原因
因为他的优化令人眼前一新!
↑这一题也要用到标记数组
优化!!!
对于一个位置,
如果他在同样的深度再一次被访问,那他接下来所走的路径,所得到的答案一定与之前相同,就没必要在一次访问了!!!
刚好这题的数据范围又很小。
\(\text{1}\) \(\le\) \(\text{R、C}\) \(\le\) \(\text{50}\)
\(\text{1}\) \(\le\) \(\text{N}\) \(\le\) \(\text{1000}\)
\(\text{1000}\) \(\times\) \(\text{50}\) \(\times\) \(\text{50}\) \(\times\) \(\text{4}\) \(=\) \(\text{1}\) \(\times\) \(10^7\)
\(10^7\) \(\div\) \(\text{8}\) \(\div\) \(\text{1024}\) \(\div\) \(\text{1024}\) \(=\) \(\text{1.}\) ...
完全够用~
所以再开一个\(\text{vis}\)数组
int vis[1005][55][55]
再加判断就ok了。
AC code
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
char a[51][51],ans[51][51];
int way[1005];
bool vis[1005][55][55];//!!!
int R,C,N;
void dfs(int x,int y,int d){
if(vis[d][x][y]==1) return;//!!!
vis[d][x][y]=1;
if(d==N+1){
ans[x][y]='*';
return;
}
if(way[d]==1)
for(int i=1;;i++){
if(x-i<1) break;
if(a[x-i][y]=='X') break;
dfs(x-i,y,d+1);
}
else if(way[d]==2){
for(int i=1;;i++){
if(x+i>R) break;
if(a[x+i][y]=='X') break;
dfs(x+i,y,d+1);
}
}
else if(way[d]==3){
for(int i=1;;i++){
if(y-i<1) break;
if(a[x][y-i]=='X') break;
dfs(x,y-i,d+1);
}
}
else{
for(int i=1;;i++){
if(y+i>C) break;
if(a[x][y+i]=='X') break;
dfs(x,y+i,d+1);
}
}
return;
}
int main(){
int x,y;
scanf("%d%d",&R,&C);
for(int i=1;i<=R;i++){
for(int j=1;j<=C;j++){
cin>>a[i][j];
if(a[i][j]=='*') x=i,y=j;
}
}
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++) ans[i][j]=a[i][j];
ans[x][y]='.';
scanf("%d",&N);
char s[10];
for(int i=1;i<=N;i++){
cin>>s;
if(s[0]=='N') way[i]=1;
if(s[0]=='S') way[i]=2;
if(s[0]=='W') way[i]=3;
if(s[0]=='E') way[i]=4;
}
dfs(x,y,1);
for(int i=1;i<=R;i++){
for(int j=1;j<=C;j++)
cout<<ans[i][j];
cout<<endl;
}
return 0;
}
summary
搜索的时候,如果发现对于一种状态,他之后的变化都相同,就可以进行标记,以防重复。
\(\text{END.}\)
\(\text{2022.5.8}\)
\(\text{2022.5.14}\)
今天又遇到了一道类似的题
P1746 离开中山路,用这种优化,遍历全图轻轻松松AC(●'◡'●)
P1189 SEARCH—搜索的更多相关文章
- 随笔之——各大热门网站search 搜索框的写法,浅析!
随笔之——各大热门网站search 搜索框的写法,浅析! 关于搜索框,写法有很多种,搜索框这一块是一个比较细的活,要先计算好他的高.宽: 下面我就以京东搜索框为例,给大家浅析一下. 上面就是最终s ...
- 【起航计划 032】2015 起航计划 Android APIDemo的魔鬼步伐 31 App->Search->Invoke Search 搜索功能 Search Dialog SearchView SearchRecentSuggestions
Search (搜索)是Android平台的一个核心功能之一,用户可以在手机搜索在线的或是本地的信息.Android平台为所有需要提供搜索或是查询功能的应用提 供了一个统一的Search Framew ...
- P1189 SEARCH(逃跑的拉尔夫)
P1189 SEARCH 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的移 ...
- django的前后的结合,search搜索功能案例
利用django的Q()功能可以很好的展开搜索功能 假设我要做个这样的搜索功能
- 使用apt-cache search搜索想要的软件包
环境: Ubuntu14.10 我在编译u-boot代码的时候遇到了如下问题: LD test/dm/built-in.o CC examples/standalone/stubs.o LD exam ...
- 题解 P1189 SEARCH
(传送门)[https://www.luogu.org/problemnew/show/P1189] 先反省一波:我以后再也不用getchar()+scanf了(日常爆零) 算是比较裸的搜索吧,在下用 ...
- Odoo search 搜索视图详解与搜索视图工作原理
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826430.html 搜索视图 搜索视图的search标签本身没什么属性可以使用,只要是<searc ...
- 洛谷P1189 SEARCH 题解 迭代加深
题目链接:https://www.luogu.com.cn/problem/P1189 题目大意: 给你一个 \(n \times m\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...
- Sentry 监控 - Search 搜索查询实战
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
随机推荐
- 【SpringBoot实战】视图技术-Thymeleaf
前言 在一个Web应用中,通常会采用MVC设计模式实现对应的模型.视图和控制器,其中,视图是用户看到并与之交互的界面.对最初的Web应用来说,视图是由HTML元素组成的静态界面:而后期的Web应用更倾 ...
- 【ACM程序设计】求最小生成树 Kuskual算法
Kuskual算法 流程 1 将图G看做一个森林,每个顶点为一棵独立的树 2 将所有的边加入集合S,即一开始S = E( 并查集) 3 从S中拿出一条最短的边(u,v),如果(u,v)不在同一棵树内, ...
- 架构师必备:Redis的几种集群方案
结论 有以下几种Redis集群方案,先说结论: Redis cluster:应当优先考虑使用Redis cluster. codis:旧项目如果仍在使用codis,可继续使用,但也推荐迁移到Redis ...
- Django学习——分组查询、图书管理系统项目、wsgi, uwsgi, cgi, fastcgi
1 分组查询 # 分组查询 # 查询每一个出版社id,以及图书平均价格(单表) # 原生sql # select publish_id,avg(price) from app01_book group ...
- Linux的快捷使用(不断更新中)
Linux 命令行提示符 ~代表当前目录,即家目录,#是超级用户提示符,如果是普通用户使用$ 基本快捷键的使用 移动光标命令 Ctrl+A:移动光标到开头 Ctrl+E:移动光标到结尾 Ctrl+F: ...
- 第一个Python程序 | 机选彩票号码+爬取最新开奖号码
(机选彩票号码+爬取最新开奖号码 | 2021-04-21) 学习记录,好记不如烂笔头 这个程序作用是<机选三种彩票类型的号码> 程序内包含功能有如下: 自动获取最新的三种彩票的开奖号码 ...
- Spring事务源码解读
一.Spring事务使用 1.通过maven方式引入jar包 <dependency> <groupId>com.alibaba</groupId> <art ...
- WinUI3开发笔记(Ⅱ)
WinUI3中的"MessageBox.Show()" # (一,如何实现) "开发WinUI3,第一个不适就是消息弹窗!" WinUI中没有C#.NetFra ...
- ACW:831. KMP字符串
感觉这道题非常有意思,学的过程中觉得及难,学完之后觉得及简单,看y总的视频没有看懂...,因此自己找了一篇博文理解并完成题目. import java.io.*; /** * @author admi ...
- SQL Server 2017 各版本之间的差异
SQL Server 2017的亮点 您选择的语言和平台 使用您选择的语言在本地和云中(现在在 Windows.Linux 和 Docker 容器上)构建现代应用程序. 行业领先的性能 充分利用任务关 ...