qdu83能吃几个子
来源:互联网 发布:js html格式化工具 编辑:程序博客网 时间:2024/04/25 20:16
Problem 83: 能吃几个子
Time Limit:1 Ms| Memory Limit:64 MB
Difficulty:1
Description
楚河-汉界”
,将中国象棋的棋盘分成两大阵营;棋盘上的棋子,最普通的莫过于“兵”
和“卒”
;对他们来讲,过“河”难,过“河”后更难;因为他们只能前进,不可退后。
Peter 刚刚学会中国象棋。在一次与高手 John 的切磋中,Peter 不幸只剩下一个“卒”
了,而 John 还有很多棋子。
考虑到 Peter 初学,为了让游戏不至于过快结束,John 对 Peter 说:
“这样吧,你把你
的‘卒’在 k 步以内能吃到的所有棋子全部拿掉。
” Peter 一下子晕了,他数不清该吃掉多
少个棋子了,你能帮他算出来吗?
,将中国象棋的棋盘分成两大阵营;棋盘上的棋子,最普通的莫过于“兵”
和“卒”
;对他们来讲,过“河”难,过“河”后更难;因为他们只能前进,不可退后。
Peter 刚刚学会中国象棋。在一次与高手 John 的切磋中,Peter 不幸只剩下一个“卒”
了,而 John 还有很多棋子。
考虑到 Peter 初学,为了让游戏不至于过快结束,John 对 Peter 说:
“这样吧,你把你
的‘卒’在 k 步以内能吃到的所有棋子全部拿掉。
” Peter 一下子晕了,他数不清该吃掉多
少个棋子了,你能帮他算出来吗?
Input
第一行一个正整数 T(T≤100),表示测试用例的组数。每组测试用例第一行输入一个正
整数 k (k ≤ 10),表示 Peter 可以连续走棋的步数。接下来的 5 行表示棋盘状态,每行一个
9 个字符的字符串,
其中’.’表示没有棋子,
’R’表示有 John 的棋子,
’B’表示这里是 Peter 的
“卒”
的位置(棋盘上有且只有一个’B’)
整数 k (k ≤ 10),表示 Peter 可以连续走棋的步数。接下来的 5 行表示棋盘状态,每行一个
9 个字符的字符串,
其中’.’表示没有棋子,
’R’表示有 John 的棋子,
’B’表示这里是 Peter 的
“卒”
的位置(棋盘上有且只有一个’B’)
Output
每组测试用例输出一行,包括测试用例编号和 Peter 的“卒”最多能吃掉的棋子数。
Sample Input
2
5
..RRR....
....R....
..R.R..R.
RR....B..
..R......
5
.........
..R......
.........
..R....R.
.....B...
5
..RRR....
....R....
..R.R..R.
RR....B..
..R......
5
.........
..R......
.........
..R....R.
.....B...
Sample Output
Case 1: 6
Case 2: 2
Case 2: 2
分析:注意理解题意,一开始我就把题意理解错了,就用广搜做的,结果样例都不过,题意不是一个m步内,而是所有的m步内能吃到的棋子,应该用深搜。
#include <iostream>#include <cstdio>#include <queue>#include <cstring>#define CLR(arr, val) memset(arr, val, sizeof(arr))using namespace std;int dx[] = {0, 0, -1};int dy[] = {1, -1, 0};char map[6][10];bool visit[6][10];bool vis[6][10];int sum, m;void dfs(int x, int y, int num){if (num >= m + 1)return ;if (map[x][y] == 'R' && !vis[x][y]){sum++;vis[x][y] = 1;}for (int i = 0; i < 3; i++){int k = x + dx[i];int l = y + dy[i];if (k < 5 && l < 9 && k >= 0 && l >= 0 && !visit[k][l]){visit[k][l] = 1;dfs(k, l, num + 1);visit[k][l] = 0;}}}int main(){int n;scanf("%d", &n);int cun = 1;while (n--){sum = 0;CLR(map, 0);CLR(visit, 0);CLR(vis, 0);scanf("%d", &m);getchar();int x_st, y_st;for (int i = 0; i < 5; i++){gets(map[i]);for (int j = 0; j < 9; j++){if (map[i][j] == 'B'){x_st = i;y_st = j;}}}dfs(x_st, y_st, 0);printf("Case %d: %d\n", cun++, sum);}return 0;}
0 0
- qdu83能吃几个子
- 能吃的宝宝
- 吃什么能明目?
- 什么能吃,什么不能吃
- 孕妇能吃板栗吗
- 吃什么能去掉黄褐斑
- Java围棋吃子详解
- fork()调用的一个趣题--fork函数能生成几个子进程???
- fork()调用的一个趣题--fork函数能生成几个子进程???
- 吃猪蹄真的能变漂亮?
- 现在还有什么是能吃的?
- 有点儿累了,最近特别能吃
- 吃什么能抗电脑辐射?
- 能吃的东西还有多少!!!!
- 吃的很晚仍然能减肥不?
- CodeForces 589F 究竟能吃多久?
- 中国九大禁菜,你敢吃几个,真受不了
- 几个可以吃甜食的时间段
- java线程的理解
- vim 中Ctags的安装和使用
- 09-查找-01-静态查找
- Matrix详解
- VC内存泄露检查工具:Visual Leak Detector
- qdu83能吃几个子
- nginx windows 下安装和配置
- c语言必看的五本书
- java静态代码块、初始化块和构造方法的执行顺序
- VS路径宏说明
- push代码到Github免输入用户名和密码
- android------(设置时间)DatePicker对象的使用
- tomcat结合nginx使用小结
- linux下perl处理文本---使用hash处理