https://www.luogu.org/problem/show?pid=1189

题目描述

年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置。

那个装置太旧了,以至于只能发射关于那辆车的移动路线的方向信息。

编写程序,通过使用一张小镇的地图帮助警察局找到那辆车。程序必须能表示出该车最终所有可能的位置。

小镇的地图是矩形的,上面的符号用来标明哪儿可以行车哪儿不行。“.”表示小镇上那块地方是可以行车的,而符号“X”表示此处不能行车。拉尔夫所开小车的初始位置用字符的“*”表示,且汽车能从初始位置通过。

汽车能向四个方向移动:向北(向上),向南(向下),向西(向左),向东(向右)。

拉尔夫所开小车的行动路线是通过一组给定的方向来描述的。在每个给定的方向,拉尔夫驾驶小车通过小镇上一个或更多的可行车地点。

输入输出格式

输入格式:

输入文件的第一行包含两个用空格隔开的自然数R和C,1≤R≤50,1≤C≤50,分别表示小镇地图中的行数和列数。

以下的R行中每行都包含一组C个符号(“.”或“X”或“*”)用来描述地图上相应的部位。

接下来的第R+2行包含一个自然数N,1≤N≤1000,表示一组方向的长度。

接下来的N行幅行包含下述单词中的任一个:NORTH(北)、SOUTH(南)、WEST(西)和EAST(东),表示汽车移动的方向,任何两个连续的方向都不相同。

输出格式:

输出文件应包含用R行表示的小镇的地图(象输入文件中一样),字符“*”应该仅用来表示汽车最终可能出现的位置。

输入输出样例

输入样例#1:

4 5
.....
.X...
...*X
X.X..
3
NORTH
WEST
SOUTH
输出样例#1:

.....
*X*..
*.*.X
X.X.. 按顺序把当前方向能访问的点全部入队,挨个遍历
 #include <cstdio>
#include <queue> int r,c,n,sx,sy,dir;
bool lose[][];
bool vis[][][],pos[][];
char map[][],d[][]; struct Node {
int x,y,dir;
}u,v;
std::queue<Node>que; bool judge(int x,int y)
{
return x>=&&x<r&&y>=&&y<c&&!lose[x][y];
}
void BFS()
{
u.x=sx; u.y=sy; u.dir=dir;
que.push(u);
for(int fx,fy,fd; !que.empty(); )
{
u=que.front(); que.pop();
int x=u.x, y=u.y;
dir=u.dir;
if(dir==n)
{
pos[x][y]=;
continue;
}
if(d[dir][]=='N') fx=-,fy=;
else if(d[dir][]=='W') fx=,fy=-;
else if(d[dir][]=='S') fx=,fy=;
else if(d[dir][]=='E') fx=,fy=;
x+=fx; y+=fy;
for(; judge(x,y); x+=fx, y+=fy)
{
if(vis[x][y][dir+]) continue;
vis[x][y][dir+]=;
que.push((Node){x,y,dir+});
}
}
} int AC()
{
scanf("%d%d",&r,&c);
for(int i=; i<r; ++i)
scanf("%s",map[i]);
scanf("%d",&n);
for(int i=; i<n; ++i)
scanf("%s",d[i]);
for(int i=; i<r; ++i)
for(int j=; j<c; ++j)
if(map[i][j]=='*') sx=i,sy=j;
else if(map[i][j]=='X') lose[i][j]=;
BFS();
for(int i=; i<r; i++)
{
for(int j=; j<c; j++)
if(map[i][j]=='X') printf("%c",'X');
else if(pos[i][j]) printf("%c",'*');
else printf(".");
puts("");
}
return ;
} int Hope=AC();
int main(){;}

洛谷—— P1189 SEARCH的更多相关文章

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

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

  2. 洛谷P1189'SEARCH'

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

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

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

  4. 洛谷U19464 山村游历(Wander)(LCT,Splay)

    洛谷题目传送门 LCT维护子树信息常见套路详见我的总结 闲话 题目摘自WC模拟试题(by Philipsweng),原题目名Wander,"山村游历"是自己搞出来的中文名. 数据自 ...

  5. 洛谷 P1706 全排列问题

    题目链接 https://www.luogu.org/problemnew/show/P1706 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数 ...

  6. 洛谷 P2404 自然数的拆分问题

    题目链接 https://www.luogu.org/problemnew/show/P2404 题目背景 木有...... 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. ...

  7. [洛谷日报第62期]Splay简易教程 (转载)

    本文发布于洛谷日报,特约作者:tiger0132 原地址 分割线下为copy的内容 [洛谷日报第62期]Splay简易教程 洛谷科技 18-10-0223:31 简介 二叉排序树(Binary Sor ...

  8. 【新知识】队列&bfs【洛谷p1996约瑟夫问题&洛谷p1451求细胞数量】

    (是时候为五一培训准备真正的技术了qwq) part1  队列(FIFO) 算法简介: FIFO:First In First Out(先进先出) 队列是限定在一端进行插入,另一端进行删除的特殊线性表 ...

  9. 洛谷U19464 山村游历(Wander)(LCT)

    洛谷题目传送门 LCT维护子树信息常见套路详见我的总结 闲话 题目摘自WC模拟试题(by Philipsweng),原题目名Wander,"山村游历"是自己搞出来的中文名. 数据自 ...

随机推荐

  1. 【剑指offer】Q19:二叉树的镜像

    def MirroRecursively(root): # root is None or just one node, return root if None == root or None == ...

  2. hdu 5411 CRB and Puzzle 矩阵高速幂

    链接 题解链接:http://www.cygmasot.com/index.php/2015/08/20/hdu_5411/ 给定n个点 常数m 以下n行第i行第一个数字表示i点的出边数.后面给出这些 ...

  3. 7种炫酷HTML5 SVG液态水滴融合分解动画特效

    这是一组使用HTML5 SVG过滤器制作的炫酷液态水滴融合分解动画特效.这些SVG动画特效使一些HTML元素.如菜单.分页button.APP.选择框等元素的过渡动画像几粒水滴一样融合分解.效果很的酷 ...

  4. c20---指向函数的指针

    // // main.c // 指向函数的指针 #include <stdio.h> void test() { printf("哥被执行了\n"); } int ge ...

  5. [Hacker] 端口大全

    一 .端口大全 端口:0 服务:Reserved 说明:通常用于分析操作系统.这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果.一种典型的扫描,使 ...

  6. HTML不熟悉方法总结

    1. onblur   属性在元素失去焦点时触发. 2. onfocus 属性在元素获得焦点时触发. 3.addEventlistener 事件监听 4.focus() 方法用于给予该元素焦点.这样用 ...

  7. 学习java的方式

  8. let,const,var三者之间的区别

    在ES6中新增了两种定义变量的命令let和const,在这之前相信大家都对var定义变量很熟悉,那么在了解ES6方法前, 1.我们先来回顾一下var定义变量的方法. 下面来看这段代码: for (va ...

  9. Android Material Design之CollapsingToolbarLayout使用

    CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout_scrollFlags,它可以控制包含在Collapsin ...

  10. RAP开发入门-主题更换

    通过配置扩展点修改应用主题    ps:需要提前准备好主题(theme.css)文件   <!-- 注册主题扩展点 -->    <extension          point= ...