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. HighCharts日期及数值格式化

    1.函数原型   1 dateFormat(Stringformat,[Numbertime],[Booleancapitalize])::String 2.说明 格式化JavaScript 时间(也 ...

  2. [译]git clone

    git clone git clone命令copy一个已经存在的Git仓储. git clone有点像svn的checkout, 他的不同之处是这个copy也是一个完整的仓储-它有自己的历史纪录, 能 ...

  3. [译]Profile and debug your ASP.NET MVC app with Glimpse

    原文:http://www.asp.net/mvc/overview/performance/profile-and-debug-your-aspnet-mvc-app-with-glimpse Gl ...

  4. 【AngularJS】—— 8 自定义指令

    AngularJS支持用户自定义标签属性,在不需要使用DOM节点操作的情况下,添加自定义的内容. 前面提到AngularJS的四大特性: 1 MVC 2 模块化 3 指令 4 双向数据绑定 下面将会介 ...

  5. Linq查询操作语句学习

    对于一个集合,我们通常会用foreach或者for循环来判断查找里面的元素. 但这种方法通常会看起来比较复杂,我们可以使用linq. Linq允许编写C#代码以查询数据库相同的方式操作内存数据(写法类 ...

  6. 郝斌C语言代码

    #include<stdio.h> int main() { ; printf("%#x\n",a); ; } /* output 0xf; */ //(15)10= ...

  7. 全栈工程师是不是必须得会HTML5?

    最近看了很多招聘,都要求前端工程师必须得会HTML5.个人觉得只要会了html,HTML5不会太难,不过全栈工程师要求会的太多了 HTML CSS JavaScript HTML 5 CSS 3 都说 ...

  8. nginx专题

    1.Nginx和php性能优化相关 专家向磊http://slaytanic.blog.51cto.com/2057708/1173021 2.Puppet利用Nginx多端口实现负载均衡http:/ ...

  9. 【C语言入门教程】4.7 指针的地址分配 - mallocl(), free()

    指针变量可指向任何类型的变量,在处理过程中,指针变量指向的变量通过传递变量的地址来实现,指针变量的取值是内存的地址,这个地址应当是安全的,不可以是随意的.否则,写入内存单元的值将使得已存放的数据或程序 ...

  10. Linux 信号量大全

    编号 信号名称 缺省动作 说明 1 SIGHUP 终止 终止控制终端或进程 2 SIGINT 终止 键盘产生的中断(Ctrl-C) 3 SIGQUIT dump 键盘产生的退出 4 SIGILL du ...