code vs 1026 逃跑的拉尔夫
年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置。
那个装置太旧了,以至于只能发射关于那辆车的移动路线的方向信息。
编写程序,通过使用一张小镇的地图帮助警察局找到那辆车。程序必须能表示出该车最终所有可能的位置。
小镇的地图是矩形的,上面的符号用来标明哪儿可以行车哪儿不行。“.”表示小镇上那块地方是可以行车的,而符号“X”表示此处不能行车。拉尔夫所开小车的初始位置用字符的“*”表示,且汽车能从初始位置通过。
汽车能向四个方向移动:向北(向上),向南(向下),向西(向左),向东(向右)。
拉尔夫所开小车的行动路线是通过一组给定的方向来描述的。在每个给定的方向,拉尔夫驾驶小车通过小镇上一个或更多的可行车地点。
输入文件的第一行包含两个用空格隔开的自然数R和C,1≤R≤50,1≤C≤50,分别表示小镇地图中的行数和列数。
以下的R行中每行都包含一组C个符号(“.”或“X”或“*”)用来描述地图上相应的部位。
接下来的第R+2行包含一个自然数N,1≤N≤1000,表示一组方向的长度。
接下来的N行幅行包含下述单词中的任一个:NORTH(北)、SOUTH(南)、WEST(西)和EAST(东),表示汽车移动的方向,任何两个连续的方向都不相同。
输出文件应包含用R行表示的小镇的地图(象输入文件中一样),字符“*”应该仅用来表示汽车最终可能出现的位置。
4 5
.....
.X...
...*X
X.X..
3
NORTH
WEST
SOUTH
.....
*X*..
*.*.X
X.X..
分类标签 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 逃跑的拉尔夫的更多相关文章
- WIKIOI 1026 逃跑的拉尔夫 深度优先搜索
/* 1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆 ...
- codevs 1026 逃跑的拉尔夫 x
1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他 ...
- 【wikioi】1026 逃跑的拉尔夫
题目链接 算法:BFS 14.01.02 PS: 本人再次脑残,BFS又是写得那么脓肿,突然发现我原来什么搜索都是不会的呀.. //2014-02-05已更新 ******************** ...
- Codevs 1026 逃跑的拉尔夫
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且 ...
- AC日记——逃跑的拉尔夫 codevs 1026 (搜索)
1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 年轻的拉尔夫开玩笑地从一 ...
- Codevs1026 逃跑的拉尔夫
题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的移动 ...
- 洛谷P1189 逃跑的拉尔夫(SEARCH)
洛谷1189 SEARCH 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的 ...
- P1189 SEARCH(逃跑的拉尔夫)
P1189 SEARCH 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置. 那个装置太旧了,以至于只能发射关于那辆车的移 ...
- Codevs1026 SEARCH(逃跑的拉尔夫 )(BFS)
SEARCH 时间限制: 1 Sec 内存限制: 128 MB提交: 11 解决: 4[提交][状态][讨论版] 题目描述 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警 ...
随机推荐
- 关于JS的几点TIPS
作为前端基本工作每天都会用到JS...但是我们对JS真的都了解吗,或者说有什么tips是我们不知道的呢.. So..此文关于JS的几点tips..... 一:定时器(可传多个参数) 首先是一个一般的定 ...
- admin site
基本步骤: 1.添加 'django.contrib.admin' 到 INSTALL_APP 设置中. 2.再添加四个依赖项: 'django.contrib.auth', 'django.cont ...
- Myeclipse右键新建项目突然变的很少
额,很是焦躁,最后在界面的右上方点Myeclipse Java enterprise变回原来模样
- 深入理解计算机系统-从书中看到了异或交换ab两个值的新感
还得从一个很经典的面试题说起:不通过第三个变量来交换两个变量a,b的值... 一个很经典的答案是通过异或来解决: 第壹步:a=a^b; 第贰步:b=a^b; 第叁步:a=a^b; 以前提起" ...
- 【Solr】solr的增删改查
目录 创建工程 增 删 改 查 高量查询 回到顶部 创建工程 普通的java web工程即可,我采用的是spring mvc! 回到顶部 增 @Autowired private SolrServer ...
- ThikPHP3.1 常用方法(one)
公司常用但没学过的一些函数,记录一下备份. 1,在Rest操作方法中,可以使用$this->_type获取当前访问的资源类型,用$this->_method获取当前的请求类型. 2.uns ...
- Maven 跳过测试目录
在命令行使用 mvn install -Dmaven.skipTests 或 mvn install -Dmaven.test.skip=true 或在pom.xml设置 <build> ...
- informatica通用命令方式启动workflow
#传mapping参数时#调用执行workflow,-sv informatica服务,-d 域 -u 用户,-p 密码 -folder知识库下的workflow所在文件夹,-wait wf_test ...
- Mac下的串口通信-ORSSerialPort
================================2015/11/05======================================= 最近在工作中遇到有关Mac下串口通信 ...
- MySQL监控系统MySQL MTOP的搭建(转VIII)
MySQLMTOP是一个由Python+PHP开发的MySQL企业级监控系统.系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理.最重要是MySQL服务器无需安装任何Agent,只 ...