题目描述 Description

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

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

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

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

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

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

输入描述 Input Description

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

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

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

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

输出描述 Output Description

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

样例输入 Sample Input

4 5

.....

.X...

...*X

X.X..

3

NORTH

WEST

SOUTH

样例输出 Sample Output

.....

*X*..

*.*.X

X.X..

dfs或bfs都可以。用一个vis[x][y][p]做访问标记,记录方向序列到p位置,访问到(x,y)点。

dfs代码

#include<iostream>
#include<cassert>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<string>
#include<iterator>
#include<cstdlib>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
#define rep(i,f,t) for(int i = (f),_end_=(t); i <= _end_; ++i)
#define rep2(i,f,t) for(int i = (f),_end_=(t); i < _end_; ++i)
#define dep(i,f,t) for(int i = (f),_end_=(t); i >= _end_; --i)
#define dep2(i,f,t) for(int i = (f),_end_=(t); i > _end_; --i)
#define clr(c, x) memset(c, x, sizeof(c) )
typedef long long int64;
const int INF = 0x5f5f5f5f;
const double eps = 1e-8;//*****************************************************int pao[1005];
int N;
const int dx[] = {0,1,0,-1};
const int dy[] = {1,0,-1,0};
char mp[55][55];
int n,m;
int vis[51][51][1001];void dfs(int x,int y,int p)
{if(vis[x][y][p])return ;vis[x][y][p] = 1;if(p==N)mp[x][y]  = '*';if(p < N){int dir = pao[p+1];int tx = x + dx[dir];int ty = y + dy[dir];if(mp[tx][ty] != 'X')dfs(tx,ty,p+1);}int dir = pao[p];int tx = x + dx[dir];int ty = y + dy[dir];if(mp[tx][ty] != 'X')dfs(tx,ty,p);
}
void solve()
{int x,y;rep(i,1,n)rep(j,1,m){if(mp[i][j] == '*'){x = i;y = j;mp[i][j] = '.';goto ok;}}
ok:int dir = pao[1];x += dx[dir];y += dy[dir];dfs(x,y,1);
}int main()
{clr(mp,'X');scanf("%d%d",&n,&m);rep(i,1,n){scanf(" %s",mp[i]+1);mp[i][m+1] = 'X';}scanf("%d",&N);char tmp[10];rep(i,1,N){scanf(" %s",tmp);switch(tmp[0]){case 'E':pao[i] = 0;break;case 'S':pao[i] = 1;break;case 'W':pao[i] = 2;break;case 'N':pao[i] = 3;break;}}solve();rep(i,1,n)rep(j,1,m){putchar(mp[i][j]);if(j==m)putchar('\n');}return 0;
}

bfs代码

#include<iostream>
#include<cassert>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<string>
#include<iterator>
#include<cstdlib>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
using namespace std;
#define rep(i,f,t) for(int i = (f),_end_=(t); i <= _end_; ++i)
#define rep2(i,f,t) for(int i = (f),_end_=(t); i < _end_; ++i)
#define dep(i,f,t) for(int i = (f),_end_=(t); i >= _end_; --i)
#define dep2(i,f,t) for(int i = (f),_end_=(t); i > _end_; --i)
#define clr(c, x) memset(c, x, sizeof(c) )
typedef long long int64;
const int INF = 0x5f5f5f5f;
const double eps = 1e-8;//*****************************************************int pao[1005];
int N;
const int dx[] = {0,1,0,-1};
const int dy[] = {1,0,-1,0};
char mp[55][55];
int n,m;
int vis[51][51][1002];struct Node
{int x,y,p;Node(int xx,int yy,int pp):x(xx),y(yy),p(pp){}
};void solve()
{int x,y;rep(i,1,n)rep(j,1,m){if(mp[i][j] == '*'){x = i;y = j;mp[i][j] = '.';goto ok;}}
ok:queue<Node> q;int dir = pao[1];q.push(Node(x += dx[dir], y += dy[dir], 1));vis[x][y][1] = 1;while(!q.empty()){x = q.front().x; y = q.front().y;int p = q.front().p;q.pop();if(p==N)mp[x][y]  = '*';if(p < N){int dir = pao[p+1];int tx = x + dx[dir];int ty = y + dy[dir];if(mp[tx][ty] != 'X')if(!vis[tx][ty][p+1]){q.push(Node(tx,ty,p+1));vis[tx][ty][p+1] = 1;}}int dir = pao[p];int tx = x + dx[dir];int ty = y + dy[dir];if(mp[tx][ty] != 'X')if(!vis[tx][ty][p]){q.push(Node(tx,ty,p));vis[tx][ty][p] = 1;}}
}int main()
{clr(mp,'X');scanf("%d%d",&n,&m);rep(i,1,n){scanf(" %s",mp[i]+1);mp[i][m+1] = 'X';}scanf("%d",&N);char tmp[10];rep(i,1,N){scanf(" %s",tmp);switch(tmp[0]){case 'E':pao[i] = 0;break;case 'S':pao[i] = 1;break;case 'W':pao[i] = 2;break;case 'N':pao[i] = 3;break;}}solve();rep(i,1,n)rep(j,1,m){putchar(mp[i][j]);if(j==m)putchar('\n');}return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/DSChan/p/4862014.html

codevs1026 逃跑的拉尔夫(搜索)相关推荐

  1. 【codevs1026】逃跑的拉尔夫,广搜的胜利

    1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一 ...

  2. code vs 1026 逃跑的拉尔夫

    1026 逃跑的拉尔夫  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但 ...

  3. 1026 逃跑的拉尔夫

    1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是 ...

  4. 【codevs1026】逃跑的拉尔夫

    problem solution codes #include<cstdio> #include<queue> #include<set>//set判重防MLE u ...

  5. 逃跑的拉尔夫---题目建议BFS

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

  6. 搜索复习-基础水题(一共12道)

    由于是跟着黄学长刷题,此篇博文里所有JudgeOnline都是http://218.5.5.242:9018/JudgeOnline/ tyvj1080 N皇后 描述 检查一个如下的6 x 6的跳棋棋 ...

  7. 【概念理论】不存在的NOIP2016

    时间:2017.6.17 0x01搜索 一.定义 1.从数据集合中找出目标元素进行处理. 2.当我们难以通过分析解决给定问题,或者找不到一个能有效解决问题的算法时,就不得不依靠反复的试错来寻求问题的答 ...

  8. CodeVs天梯黄金Gold题解

    title: CodeVs天梯之Gold date: 2017-12-28 tags: 天梯 CodesVs categories: OI CodeVs天梯之Gold 2018.01.04 By gw ...

  9. uva 707(记忆化搜索)

    题意:在一个方阵中,一个强盗犯要逃跑.你是警察要去抓他,现在你手上有若干线索他们会告诉你第i时刻一个方阵中他们没有看见强盗.在t秒后全部道路会封锁.让你通过线索来判断是不是能够找到小偷在某一秒的位置. ...

最新文章

  1. Gradle之依赖管理
  2. 8-7-Exercise
  3. php 组合模式,php设计模式(十三)透明组合模式
  4. windows系统SSH证书设置
  5. 一代诗嗤张宗昌,代表性作品选
  6. 商品信息SKU数据库设计
  7. 前嗅教你大数据——史上最全代理IP服务商对比
  8. imu 里程计融合_视觉里程计IMU辅助GPS融合定位算法研究
  9. 斐讯n1刷armbian建lnmp环境+WordPress
  10. C# WebApi 返回详细错误信息
  11. LeetCode刷题之1436. 旅行终点站
  12. 教你如何从零开始搭建一个属于自己的网站
  13. 查看域名是否支持IPv6
  14. Java——博主的学习路线
  15. 谈谈对python中的日期、时间、时区的理解(1)
  16. 安卓微信跳转页面、重定向页面空白,ios系统正常、pc正常、安卓浏览器正常。
  17. 2018 51信用卡春招后端开发实习题解
  18. Android FrameWork 系统源码调试
  19. IAR下连仿真器可以正常运行,程序下载到flash部分功能异常
  20. 女人撒娇18计玩转男人心

热门文章

  1. java书籍_Java学习必备书籍(快来收藏)
  2. 我的内核学习笔记10:Intel GPIO驱动源码分析
  3. openssl、libosip2、libeXosip2三个库的编译过程
  4. 深度学习入门笔记:Day-10
  5. insert 数组_Java数组和集合的效率问题
  6. 【Flink】Flink SQL 报错 ClassCastException: VarCharType cannot be cast to RowType
  7. 【kafka】WARN Attempting to send response via channel for which there is no open connection
  8. 【Elasticsearch】你看懂 Elasticsearch Log 中的 GC 日志了吗?
  9. 【数据格式】Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据
  10. 【SpringClould】SpringClould eureka 单机 使用 ribbon 负载均衡