将这题加进来的原因

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

题目传送门()

相似的题目之 血色先锋队

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

优化!!!

对于一个位置,

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

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

\(\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. echarts踩坑总结

    1,有关echarts引用的相关报错直接写这句  import * as echarts from 'echarts' 2,折线图 chartsObj = { tooltip: { trigger: ...

  2. uniapp 入门

    uniapp官网 uni-app 是一个使用 Vue.js (opens new window)开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.Web(响应式).以及各种小 ...

  3. BUUCTF-MISC:二维码

    题目 解题过程 1.点击下载附件,发现是一个压缩包,解压后得到一张二维码 2.使用QR research扫描,得到的内容并不是flag 3.使用010editor打开图片分析,发现图片里面含有一个tx ...

  4. JSP标签、JSTL标签、EL表达

    JSP页面转发,附带数据 <jsp:forward page="/jsptag2.jsp"> <jsp:param name="name" v ...

  5. [AcWing 778] 字符串最大跨距

    点击查看代码 #include<iostream> using namespace std; string s, s1, s2; int main() { char c; while (c ...

  6. ajax 请求登录超时跳转登录页解决方法

    在Filter里判断是否登录,如果未登录返回401状态 public class SelfOnlyAttribute : ActionFilterAttribute { public override ...

  7. 命令行参数 getopt模块

    getopt中的函数: getopt.getopt(sys.argv[1:], shortopts, longopts=[]) args指的是当前脚本接收的参数,它是一个列表,可以通过sys.argv ...

  8. 好客租房49-组件的props(特点)

    特点 1可以给组件传递任意类型的数据 2props是只读的对象 只能读取属性的值 无法修改对象 3注意:使用类组件时 如果写了构造函数 应该将props传递给super() 否则 无法在构造函数 中获 ...

  9. unity---UI管理模块

    UI管理器 任务: 1.所有面板的父类,2.UIMgr 所有UI控件都继承UIBehaviour 面板基类 找到相应空间 简化后 也存在问题:一个物体可以同时挂载两个组件 导致键相同,而值不同, 将值 ...

  10. Android 子线程 UI 操作真的不可以?

    作者:vivo 互联网大前端团队- Zhang Xichen 一.背景及问题 某 SDK 有 PopupWindow 弹窗及动效,由于业务场景要求,对于 App 而言,SDK 的弹窗弹出时机具有随机性 ...