oj betch与奔驰
Problem 38: bench与奔驰
Time Limit:1 Ms| Memory Limit:128 MB
Difficulty:2
Description
公园里的bench与奔驰都是无敌的,不会被撞坏。
由于开奔驰的人比较"有特点",总是向上下左右四个方向开,而且只会在撞到椅子之后改变方向(起步时除外) - -!
现在他给你一张地图,上面标明 他的位置 、 公园里的bench的位置 和 他想到达的位置,可能会有冲出地图的可能
请你告诉他最少撞多少下才能到达目的地,并答应事成之后会给你一辆奔驰..............................................的照片
Input
以下是地图,"."表示地面,"S"表示起点,"E"表示终点,"B"表示bench(什么意思呢?)
保证只有一个终点和一个起点,并不会出现其他字符
Output
如果能到达目的地,就在第二行输出最少的撞击次数
Sample Input
5 5
BBBBB
B...B
BSE.B
B...B
BBBBB
测试数据2:
3 3
S..
...
..E
Sample Output
Yes
0
测试数据2:
No
Hint
测试数据2:四个方向都会冲出地图
注意:可能冲出地图,或者永远无法到达。
起初打算用bfs,提交之后超时,估计陷入死循环,不该访问的点多次访问。
后来采用dfs,终于过了
感觉这个题与poj的冰壶类似,不过冰壶碰到障碍物,障碍物会消失,也就是说冰壶可以在
暂停的位置向任意一个方向走(可以原路返回),但是这个题障碍物是无敌的,所以每次停下后,
下次只能向其他两个方向前进(不包括当前前进的方向,和反向),因此每次前进都要判断想那个方向,
还有,要把每次转换方向的点标记(标记为X不标记为B,原因是与障碍物区分出来),以防止陷入死循环,比如
BBBBB
BB..B
B.S.B
BE..B
BBBBB
如果从S出发向下->向右->向上->向左->向下。。。。。,就发生了死循环(如果不标记每个转向点)。
题目说:如果找到就要输出最小转向次数,所以要把所有的可能都找出来,选择最小的,不能找到就退出。
#include <stdio.h>
#include <memory.h>char map[54][54];
char dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};int w, h, sx, sy, minstep;
bool flag;void dfs(int x, int y, int d, int step)
{int i, nx, ny;for (i=0; i<4; ++i){if (d == i)continue;if (d == 0 && i==1)continue;if (d == 1 && i == 0)continue;if (d == 2 && i == 3)continue;if (d == 3 && i == 2)continue;nx = x + dir[i][0];ny = y + dir[i][1];if (map[ny][nx] == 1 || map[ny][nx] == 'B')continue;while (map[ny][nx] == '.'){nx += dir[i][0];ny += dir[i][1];}if (map[ny][nx] == 'E'){flag = true;if (minstep > step)minstep = step;continue;}if (map[ny][nx] == 1)continue;if (map[ny][nx] == 'X')continue;nx -= dir[i][0];ny -= dir[i][1];map[ny][nx] = 'X';dfs(nx, ny, i, step+1);map[ny][nx] = '.';}
}int main()
{scanf("%d %d", &h, &w);getchar();int i, j;memset(map, 1, sizeof(map));for (i=1; i<=h; ++i){for (j=1; j<=w; ++j){scanf("%c", &map[i][j]);if (map[i][j] == 'S'){sx = j;sy = i;map[i][j] = 'X';}}getchar();}flag = false;minstep = 2000000000;dfs(sx, sy, -1, 0);if (flag)printf("Yes\n%d\n", minstep);elseputs("No");return 0;
}
oj betch与奔驰相关推荐
- 竞争神经网络 python_用python解决kaggles奔驰环保竞争
竞争神经网络 python Part 2 - Validation, Hyperparameter Tuning, and Feature Selection 第2部分-验证,超参数调整和特征选择 介 ...
- 南大算法设计与分析课程OJ答案代码(5)--割点与桥和任务调度问题
问题 A: 割点与桥 时间限制: 1 Sec 内存限制: 5 MB 提交: 475 解决: 34 提交 状态 算法问答 题目描述 给出一个无向连通图,找到所有的割点和桥 输入 第一行:点的个数,如 ...
- 【ACM】杭电OJ 2037
题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...
- 【ACM】杭电OJ 2020(排序)
题目链接:杭电OJ 2020 排序可以有冒泡排序,选择排序,或者直接调用函数. 下面是选择排序: #include <stdio.h> #include <math.h> in ...
- 【ACM】杭电OJ 2018
题目链接:杭电OJ 2018 从n>4开始,每一年的牛的数量=前一年的牛的数量+三年前的牛的数量 问:为什么是三年前? 答:假设三年前有一头小牛出生,出生的那一年即为第一年,到了第四年,即三年后 ...
- 【ACM】杭电OJ 1005
题目链接:杭电OJ 1005 超时代码如下(而且开辟的数组空间大小不够): #include <stdio.h> int m[100000]; int f(int n,int a,int ...
- 【ACM】杭电OJ 1004
题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...
- 【ACM】杭电OJ 2012。
题目链接:杭电OJ 2012 思路很简单,但是有一种高效算法显示编译错误,不知道为什么 运行环境:VS2017 AC代码: #include <stdio.h> #include < ...
- 【ACM】杭电OJ 1003。
运行环境VS2017 题目链接:杭电OJ 1003 主要思想是: 用d[i]来存放前i项中最大的和,得到end,然后再倒推,得起始的位置begin 然而在程序42行的疑问,大家可以讨论一下吗???? ...
最新文章
- WPF使用Linq 一行代码搞定数据绑定
- 交叉编译 FLTK1.3.0
- 完整mes代码(含客户端和server端_Ice简介+Qt代码示例
- OpenCASCADE:调试工具和提示
- Comet OJ(Contest #8)-C符文能量【dp】
- Linux 终端下 dstat 监控工具
- java文件编码格式环境变量_Jenkins maven 构建乱码,修改file.encoding系统变量编码为UTF-8...
- pr调色预设_视频调色不好掌握?用这2000套PR、AE、达芬奇调色预设吧
- 问题 G: 编写函数:数组的排序 (Append Code)
- centos7 设置ssh免密码登录配置方法
- 各年龄段都是怎么提加薪的?
- VM Workstation 虚拟机安装Ghost XP教程
- 【MyBean调试笔记】接口的使用和清理
- 量子世界的测不准定律
- MFC中有关鼠标单击双击响应的问题
- PTA-IP地址转换
- 前端JS常见树——Tree
- java中静态方法与非静态方法的区别及非静态方法的注意事项
- (OK) MIMP - 18 ( 5 nodes) - 抓包-缺少 MPTCP-JION - 发现了另一个问题【M1 ping M5】不可以 ping 通
- 移动端避免使用100vh
热门文章
- 大数据AI智能—物联网世界对职业发展的影响
- Java POI 读取word文件
- ADS学习笔记—2.原理图界面
- 【JY】中南建筑设计院:雷神山医院设计仿真应用与设计创新那些事
- CVE-2018-20250 -- WinRAR远程代码执行漏洞结合Metasploit+Ngrok实现远程上线
- 【Spark分布式内存计算框架——Spark Core】6. RDD 持久化
- delve支持arm设备吗?
- 【半监督医学图像分割 2022 CVPR】S4CVnet 论文翻译
- Go语言系列-Go内建容器
- 普通计算机硬件cpu,DIY硬件搭配技巧:组装电脑如何搭配CPU和显卡才最合适?