qdu83能吃几个子


Problem 83: 能吃几个子


Time Limit:1 Ms| Memory Limit:64 MB
Difficulty:1

Description

楚河-汉界”
,将中国象棋的棋盘分成两大阵营;棋盘上的棋子,最普通的莫过于“兵”
和“卒”
;对他们来讲,过“河”难,过“河”后更难;因为他们只能前进,不可退后。
Peter 刚刚学会中国象棋。在一次与高手 John 的切磋中,Peter 不幸只剩下一个“卒”
了,而 John 还有很多棋子。
考虑到 Peter 初学,为了让游戏不至于过快结束,John 对 Peter 说:
“这样吧,你把你
的‘卒’在 k 步以内能吃到的所有棋子全部拿掉。
” Peter 一下子晕了,他数不清该吃掉多
少个棋子了,你能帮他算出来吗?

Input

第一行一个正整数 T(T≤100),表示测试用例的组数。每组测试用例第一行输入一个正
整数 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...

Sample Output

Case 1: 6
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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值