1026 逃跑的拉尔夫

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold

题解

题目描述 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..

数据范围及提示 Data Size & Hint

分类标签 Tags 点此展开

广度优先搜索 搜索
# include <stdio.h>
# include <stdlib.h>
# include <iostream>
# include <string.h>
# include <queue>
# define cls(a) memset(a, 0, sizeof(a))
# define oo 2147483647
# define ll long long
using namespace std;struct node
{int x, y, d;
} s;
int n, m,tot;
int map[51][51],boo[51][51][1001],step[1001];
int dx[5] = {0, -1, 1, 0, 0};
int dy[5] = {0, 0, 0, -1, 1};
queue <node> Q;
inline void bfs()
{boo[s.x][s.y][1] = 1;s.d = 1; //移动的方向 Q.push(s);//把s压入队列中 while(!Q.empty()){//如果队列不为空 node v=Q.front(); //把v变成与node定义相同的结构体,并使结构体v中各元素的值与node中各元素的值相同; Q.pop();//弹出队首元素 v.x+=dx[step[v.d]];//从开始点开始项规定方向移动(这是第v.d次的移动,v.d代表移动方向); v.y+=dy[step[v.d]];//同上; if(v.x>0&&v.x<=n&&v.y>0&&v.y<=m&&!boo[v.x][v.y][v.d]&&map[v.x][v.y]) {//移动不超范围,并且在该方向下没走到过,并且没有围墙 if(v.d == tot) map[v.x][v.y] = 2;//如果走完了,把该点记录为能走到的最后一个点 boo[v.x][v.y][v.d] = 1;//否则标记该点走过 Q.push(v);//把结构体v压入队列; if(v.d + 1 <= tot)v.d++,Q.push(v);//如果没走完走,继续走
       }}
}
int main()
{scanf("%d%d", &n, &m);//读入n,m; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++){char ch;scanf(" %c", &ch);    //输入字符 if(ch == '.') map[i][j] = 1;//用map数组将字符数组转化为数字数组; if(ch == '*') s.x = i, s.y = j, map[i][j] = 1;//s.x记录下开始点的横坐标,s.y记录下开始点的纵坐标,开始点可走;
       }scanf("%d", &tot);//输入所走方向数; for(int i = 1; i <= tot; i++){char ch[10]; scanf(" %s", ch);//输入方向if(ch[0] == 'N') step[i] = 1;if(ch[0] == 'S') step[i] = 2;if(ch[0] == 'W') step[i] = 3;if(ch[0] == 'E') step[i] = 4;//用1,2,3,4四个数代替北南西东,用step数组存方向
    }bfs();//开始搜索 (重点) for(int i = 1; i <= n; i++, printf("\n"))for(int j = 1; j <= m; j++){char ch = 'X';if(map[i][j] == 2) ch = '*';    if(map[i][j] == 1) ch = '.';printf("%c", ch);//输出结束后的状态图;
       }return 0;
} 

 广度优先搜索,搜每种情况下能到达的所有情况,然后对每种情况继续搜索,直至搜索完毕后输出;

转载于:https://www.cnblogs.com/cangT-Tlan/p/6050823.html

code vs 1026 逃跑的拉尔夫相关推荐

  1. 1026 逃跑的拉尔夫

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

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

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

  3. codevs1026 逃跑的拉尔夫(搜索)

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

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

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

  5. 【codevs1026】逃跑的拉尔夫

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

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

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

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

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

  8. CodeVs天梯黄金Gold题解

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

  9. MYSQL ERROR CODE 错误编号的意义

    mysql error code(备忘) 转1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件 ...

最新文章

  1. jqgrid横向滚动条
  2. Isomorphic Strings
  3. 【正一专栏】评《我的前半生》——我们需要怎样的价值观
  4. json文件示例_Spark SQL - JSON数据集
  5. 程序的加载和执行(一)——《x86汇编语言:从实模式到保护模式》读书笔记21
  6. SAP Spartacus在没有修改用户名和密码的前提下,出现登录错误的原因
  7. 【Python数据结构】——链表
  8. [密码学基础][每个信息安全博士生应该知道的52件事]52.先进的应用概念 系统的大致安全需求
  9. C语言字符篇(五)内存函数
  10. html360度视角观赏,360度全景图是如何生成的?
  11. 【Redis笔记】数据结构与对象:链表
  12. shopnc B2B2C商城 Nginx下开启伪静态
  13. 【背包问题】基于matlab离散粒子群算法求解背包问题【含Matlab源码 423期】
  14. 计算机学课毕业论文,计算机专业毕业论文(精选5篇)
  15. win10删除软件注册表
  16. 看懂影片标题,各种电影视频格式标题的含义
  17. 正则校验IP及端口和域名和手机号、座机同步校验
  18. codeforces 869c(组合数)
  19. C++ 小白 学习记录15
  20. oracle minus 是什么意思,oracle minus用法

热门文章

  1. Huffman(哈夫曼)编码--又称最佳编码(最有效的二进制编码)
  2. 转 10 个最佳的 Node.js 的 MVC 框架
  3. Performance Prism
  4. neural network ppt for support vector machine
  5. 计算机科学,我觉得最可靠的排名
  6. 我建议您还是不要尝试和外国人讨论文学了,您干不过的。。。还是跟他们拼数学,逻辑,编程比较合适
  7. windows 如何使用4GB(开启3GB和PAE)
  8. python3高阶函数:map(),reduce(),filter()的区别
  9. SaaS新模式:业务、财务与支付无缝对接
  10. 两大开源游戏引擎Cocos2d-x及OGEngine对比分析