[省选] [BFS] [HLOI2016] 黑白棋
来源:互联网 发布:政治考试软件 编辑:程序博客网 时间:2024/04/29 12:16
问题描述 Description
有这样一种有趣的棋类游戏,假设有一个
N×N 方格的棋盘,棋盘中存在障碍格,即该格子不能放置棋子。棋盘上有若干个白色棋子和黑色棋子随机摆放,每个格子只能放一个棋子。现在你知道棋盘的初始状态和最终状态,请问最少需要移动几次棋子才能从初始状态达到最终状态。棋子的移动规则如下:
1. 每次选择1枚棋子进行移动。
2. 必须先移动白棋,按照先白棋后黑棋的顺序交替进行。
3. 每次选择的棋子可以在水平、垂直以及对角线共计8个方向中的任意方向上移动,棋子每次移动只有当遇到棋盘边界,棋盘中的障碍或者其他的棋子时才会停止。
4. 棋盘中的障碍格不能移动。
输入 Input
第一行给出
N 。
接下来输入包括2×N 行,每行N 个字符。前N 行表示棋盘的初始状态,后N 行表示棋盘的最终状态。
字符w表示白色棋子,字符b表示黑色棋子,字符#表示棋盘中的障碍,字符*表示棋盘中的空格。保证黑白棋子数相等。
输出 Output
输出最少需要移动的次数,如果不能从初始的状态移动到最终的状态输出
−1 。
样例输入 Sample Input
3
w*b
#*w
b**
b*w
#w*
**b
样例输出 Sample Output
5
限制 Limits
对于
20% 的数据,保证N=2 。
对于50% 的数据,保证2≤N≤3 。
对于100% 的数据,保证2≤N≤4 。
Time Limit :5s & Memory Limit :256MB
在做题之前,请注意这句话:
棋子每次移动只有当遇到棋盘边界,棋盘中的障碍或者其他的棋子时才会停止。
我也不知道为什么要注意这句话
听说考试的时候有人被坑了?
题解中给出了用Tire树完成这种哈希的方法,挺神的。不过我觉得还是直接点好
关于先移动白棋,再移动黑棋,可以发现,奇数步移动白棋,偶数步移动黑棋,这样就可以根据步数的奇偶性判断应该移动的棋子。
时间玄学。
Code
- [省选] [BFS] [HLOI2016] 黑白棋
- Codevs_P2743 黑白棋游戏(BFS)
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- 黑白棋
- POJ 1753 Flip Game (黑白棋) (状态压缩+BFS)
- BFS:UVa220 ACM/ICPC 1992-Othello(黑白棋)
- 【MyBatis】开发dao方法的比较
- CodeForces 623B Array GCD
- cjoj1491 【NOIP2001】GCD和LCM问题
- 安卓模拟器Genymotion安装
- 浅谈工程师的调试法宝(5) -JScope的应用_MCU
- [省选] [BFS] [HLOI2016] 黑白棋
- JavaScript中鼠标事件触发顺序探索
- Unity渲染优化中文翻译(一)
- 自定义动画框架
- Hadoop伪分布式环境搭建
- MyBatis数据分页的实现
- OPENGL开发环境搭建
- hadoop namenode节点格式化注意的问题以及对hbase的影响
- [积累]几个GitHub项目