将这题加进来的原因

因为他的优化令人眼前一新!

题目传送门()

相似的题目之 血色先锋队

↑这一题也要用到标记数组

优化!!!

对于一个位置,

如果他在同样的深度再一次被访问,那他接下来所走的路径,所得到的答案一定与之前相同,就没必要在一次访问了!!!

刚好这题的数据范围又很小。

\(\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—搜索的更多相关文章

  1. 随笔之——各大热门网站search 搜索框的写法,浅析!

    随笔之——各大热门网站search 搜索框的写法,浅析!   关于搜索框,写法有很多种,搜索框这一块是一个比较细的活,要先计算好他的高.宽: 下面我就以京东搜索框为例,给大家浅析一下. 上面就是最终s ...

  2. 【起航计划 032】2015 起航计划 Android APIDemo的魔鬼步伐 31 App->Search->Invoke Search 搜索功能 Search Dialog SearchView SearchRecentSuggestions

    Search (搜索)是Android平台的一个核心功能之一,用户可以在手机搜索在线的或是本地的信息.Android平台为所有需要提供搜索或是查询功能的应用提 供了一个统一的Search Framew ...

  3. P1189 SEARCH(逃跑的拉尔夫)

    P1189 SEARCH 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的移 ...

  4. django的前后的结合,search搜索功能案例

    利用django的Q()功能可以很好的展开搜索功能 假设我要做个这样的搜索功能

  5. 使用apt-cache search搜索想要的软件包

    环境: Ubuntu14.10 我在编译u-boot代码的时候遇到了如下问题: LD test/dm/built-in.o CC examples/standalone/stubs.o LD exam ...

  6. 题解 P1189 SEARCH

    (传送门)[https://www.luogu.org/problemnew/show/P1189] 先反省一波:我以后再也不用getchar()+scanf了(日常爆零) 算是比较裸的搜索吧,在下用 ...

  7. Odoo search 搜索视图详解与搜索视图工作原理

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826430.html 搜索视图 搜索视图的search标签本身没什么属性可以使用,只要是<searc ...

  8. 洛谷P1189 SEARCH 题解 迭代加深

    题目链接:https://www.luogu.com.cn/problem/P1189 题目大意: 给你一个 \(n \times m\) 的矩阵,其中有一些格子可以走,一些各自不能走,然后有一个点是 ...

  9. Sentry 监控 - Search 搜索查询实战

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

随机推荐

  1. 今天遇到 Could not determine type for: java.util.List

    今天遇到 Could not determine type for: java.util.List 用hibernate 映射好好的竟然出现这个问题 以前也遇到过,但不知道怎么给解决了,今天又遇到了, ...

  2. pycharm 打包py程序为exe

    传送门 在终端输入 pyinstaller -F xxx.py -n 新名字 --noconsole --noconsole 去掉cmd命令窗口 -F 打包成一个文件 -D 打包成一个文件夹 -i 加 ...

  3. VS Code 真的会一统江湖吗?

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 作者 | ROBEN KLEENE / 策划 | 万佳原文链接:https://blog.ro ...

  4. CentOS 7 执行 yum 命令失败问题的排查方法

    一个执着于技术的公众号 简介 本文主要为大家讲解 CentOS 7系统中执行yum命令失败等常见问题的排查方法. 1.执行yum命令报404错误 1)检查yum仓库是否配置正确,可以到阿里云下载rep ...

  5. Nginx中FastCGI参数的优化配置实例

    在配置完成Nginx+FastCGI之后,为了保证Nginx下PHP环境的高速稳定运行,需要添加一些FastCGI优化指令.下面给出一个优化实例,将下面代码添加到Nginx主配置文件中的HTTP层级. ...

  6. C# .NET ML.NET 机器学习 图像分类

    一. 准备工作 IDE是 VS2019.先下载好"resnet_v2_50_299.meta"这个文件,放入"C:\Users\jk\AppData\Local\Temp ...

  7. Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查

    今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...

  8. CF1588F Jumping Through the Array

    在讲正解之前,先播一个小故事: xay 复杂度错误过题.将操作按照时间分块,块内他令所有置换环都必须有至少一个"黑点". 可以通过没有修改 \(p\) 操作,同时 \(p_i=i\ ...

  9. Golang 常见设计模式之单例模式

    之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式.单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在.根据这一特 ...

  10. .NET中的并发操作集合

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月1日. 一.并发集合 .NET中提供了相当多线程安全的集合,它们都在System.Collections.Concurrent命名 ...