题面描述

Ryan 最近迷上了弹幕游戏。所谓弹幕游戏,指的是玩家操控一位角色对来袭的大量敌人进行攻击,并在过程中升级、强化自我的能力,最终打败 Boss 的一类游戏。

“控制着主人公在枪林弹雨中穿行而不中弹的感觉真是太爽了!”—— Ryan

作为一个资深弹幕游戏玩家, Ryan 现在已经不再执着于不中弹,了,而是把目光转移到了所谓的“擦弹”这种高端游戏方式上。

“擦弹”是指玩家紧靠子弹而又不中弹的行为。如图所示。

图中“*”表示子弹,“ . ”表示空位。主人公每次可以往上下左右方向移动一格。按照箭头的走法,就可以擦到紫色的子弹,擦弹数量为 4 。

注意,一个子弹即使被擦弹多次,但只会被计 1 次。

现在 Ryan 面前有一些固定不动的子弹,他想知道在不中弹的前提下,最大的擦弹数是多少。

输入数据

输入数据有多组,第一行是数据组数 T(T ≤ 50) 。每组数据的第一行为两个整数 n 和 m ,表示屏幕的规格是 n*m(n 行 m 列 ) 。第二行为两个整数 x 和 y ,表示主人公起始点在 x 行 y 列。接下来 n 行是一个 n*m 的矩阵,仅由 "*" 和 "." 组成 (1 <= n, m <= 500, 1 <= x <= n, 1 <= y <= m) 。保证起始点一定没有子弹,即矩阵的 (x,y) 处一定为 "." 。

输出数据

对每组数据在单独的一行中输出结果,格式为“ Case #k: result ” ( 冒号后有空格 ) ,表示第 k 组数据对应主人公最大的擦弹数量为 result 。

样例输入

 

3
 4 4
 4 3
 ...*
 ..**
 ...*
 ...*
 3 5
 2 3
 .*.*.
 *...*.*.*.
 3 3
 2 2
 ***
 *.*
 ***

 

样例输出

 

Case #1: 4
 Case #2: 6
 Case #3: 4

 

解题思路

遍历查询,结合递归调用就能解决。在这个过程中,控制移动位置我用了以下代码实现,竟然是 :RE无效内存引用。但是数组并没有溢出,不知道是什么原因。后来就采用了算是别人代码的思想吧,直接给出移动位置,逐步访问即可。

出错的代码片段

for (int i = -1 ; i <= 1 ; i++)// 移动顺序:上->左->右->下
        for (int j = -1 ; j <= 1 ; j++){
            if (fabs(i) != fabs(j) && Gamemap[x+i][y+j] != '0'){// 保证移动位置是上下左右

 

全部程序代码如下

弹幕jquery 弹幕游戏是什么意思_C

弹幕jquery 弹幕游戏是什么意思_数据_02

 

弹幕jquery 弹幕游戏是什么意思_数据_03