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, , sizeof(a))
# define oo
# define ll long long
using namespace std; struct node
{
int x, y, d;
} s;
int n, m,tot;
int map[][],boo[][][],step[];
int dx[] = {, -, , , };
int dy[] = {, , , -, };
queue <node> Q;
inline void bfs()
{
boo[s.x][s.y][] = ;
s.d = ; //移动的方向
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>&&v.x<=n&&v.y>&&v.y<=m&&!boo[v.x][v.y][v.d]&&map[v.x][v.y]) {//移动不超范围,并且在该方向下没走到过,并且没有围墙
if(v.d == tot) map[v.x][v.y] = ;//如果走完了,把该点记录为能走到的最后一个点
boo[v.x][v.y][v.d] = ;//否则标记该点走过
Q.push(v);//把结构体v压入队列;
if(v.d + <= tot)
v.d++,
Q.push(v);//如果没走完走,继续走
}
}
}
int main()
{
scanf("%d%d", &n, &m);//读入n,m;
for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++){
char ch;
scanf(" %c", &ch); //输入字符
if(ch == '.') map[i][j] = ;//用map数组将字符数组转化为数字数组;
if(ch == '*') s.x = i, s.y = j, map[i][j] = ;//s.x记录下开始点的横坐标,s.y记录下开始点的纵坐标,开始点可走;
}
scanf("%d", &tot);//输入所走方向数;
for(int i = ; i <= tot; i++){
char ch[];
scanf(" %s", ch);//输入方向
if(ch[] == 'N') step[i] = ;
if(ch[] == 'S') step[i] = ;
if(ch[] == 'W') step[i] = ;
if(ch[] == 'E') step[i] = ;//用1,2,3,4四个数代替北南西东,用step数组存方向
}
bfs();//开始搜索 (重点)
for(int i = ; i <= n; i++, printf("\n"))
for(int j = ; j <= m; j++){
char ch = 'X';
if(map[i][j] == ) ch = '*';
if(map[i][j] == ) ch = '.';
printf("%c", ch);//输出结束后的状态图;
}
return ;
}
 广度优先搜索,搜每种情况下能到达的所有情况,然后对每种情况继续搜索,直至搜索完毕后输出;

code vs 1026 逃跑的拉尔夫的更多相关文章

  1. WIKIOI 1026 逃跑的拉尔夫 深度优先搜索

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

  2. codevs 1026 逃跑的拉尔夫 x

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

  3. 【wikioi】1026 逃跑的拉尔夫

    题目链接 算法:BFS 14.01.02 PS: 本人再次脑残,BFS又是写得那么脓肿,突然发现我原来什么搜索都是不会的呀.. //2014-02-05已更新 ******************** ...

  4. Codevs 1026 逃跑的拉尔夫

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

  5. AC日记——逃跑的拉尔夫 codevs 1026 (搜索)

    1026 逃跑的拉尔夫  时间限制: 1 s    空间限制: 128000 KB    题目等级 : 黄金 Gold 题解       题目描述 Description   年轻的拉尔夫开玩笑地从一 ...

  6. Codevs1026 逃跑的拉尔夫

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

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

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

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

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

  9. Codevs1026 SEARCH(逃跑的拉尔夫 )(BFS)

    SEARCH 时间限制: 1 Sec  内存限制: 128 MB提交: 11  解决: 4[提交][状态][讨论版] 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警 ...

随机推荐

  1. 浙大PAT-1001

    1001. 害死人不偿命的(3n+1)猜想 (15) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去, ...

  2. VTK初学一,b_PolyVertex多个图形点的绘制

    #ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRend ...

  3. spring 缓存(spring自带Cache)(入门)

    spring的缓存机制,是方法纬度的缓存机制, 这就意味着我们并不用关注 底层是否使用了数据库以及通过什么方式访问的数据库: 因此,此缓存方法既适用于dao层,也适用于service层. spring ...

  4. mybatis批量插入数据到oracle

    mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“  错误解决方法 oracle批量插入使用 insert a ...

  5. 微信企业号公测开启OA红海模式

    之前就有传出消息说腾讯要出微信企业号,百度直达号的发布间接敦促了微信企业号的开发进度,这不,企业号开始公测了.以下是微信π的消息.[微信企业号已开通账号超过10万 日均消息量超过100万条] 今日,微 ...

  6. ajax异步提交数据动态更改select选项

    <!DOCTYPE html> <html> <head> <title></title> <script src="../ ...

  7. Effective Java 读书笔记之三 类和接口

    一.使类和成员的可访问性最小化 1.尽可能地使每个类或者成员不被外界访问. 2.实例域决不能是共有的.包含公有可变域的类不是线程安全的. 3.除了公有静态final域的特殊情形之外,公有类都不应该包含 ...

  8. leetcode 141. Linked List Cycle

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  9. 3.创建基本的AngularJS应用

    1.1.模块 AngularJS引入了代表应用程序组件的模块的概念.模块提供命名空间,以基于模型的名称来引用指令,范围和其他组件.使得包装和再利用应用程序的部件更容易. AngularJS中,每个视图 ...

  10. 关于linux中文乱码的问题。

    公司让人在一台装有ubuntu14.04的机器上安装net-snmp,可是这台机器的设置很让人不喜.没关系,一个个解决它. 不能连接外网,得弄一个代理. 这个好说,在可以上外网的本机上安装squid工 ...