当前位置: 首页 > 知识库问答 >
问题:

在2D数组中检查4个连续相同的对角线元素(连接4个游戏)

罗鸿畴
2023-03-14
 * * * * * * *
 * * * * * * *
 Y * * * * * *
 R Y * * Y * *
 Y R Y R Y R R
 R Y R Y R Y R

案例2:

 * * * * * * *
 * * * * * * *
 * * * * * R *
 * * * * R Y *
 * * * R Y R *
 Y Y R Y R Y R

如何检查以解决这些情况?

共有1个答案

姜嘉荣
2023-03-14

您只需要检查type类型的新片段被放置在哪里,因为游戏域的其余部分保持不变。在那里,您可以这样做:

/** 
 * Counts pieces of the given type, starting at (y, x), 
 * in the direction denoted by (dy, dx).
 * Stops at field boundaries or when a different field type is encountered. 
 */
int count(char type, int x, int y, int dx, int dy) {
  int count = 0;
  x += dx;  // Skip the piece at (y, x) to avoid counting it twice
  y += dy;  // when looking in both directions on a line.
  while (x >= 0 && x < 7 && y >= 0 && y < 6 && board[x][y] == type) {
    count++;
    x += dx;  // Move in the direction denoted by (dy, dx)
    y += dy;
  }
  return count;
} 

/**
 * Main entry point after a new piece of type `type` was added at (y, x). 
 * Returns true if this connects 4 or more in any direction.
 */
boolean check(char type, int x, int y) {
  return count(type, x, y, -1, 0) + 1 + count(type, x, y, 1, 0) >= 4  // horizontal
      || count(type, x, y, 0, -1) + 1 + count(type, x, y, 0, 1) >= 4  // vertical
      || count(type, x, y, -1, -1) + 1 + count(type, x, y, 1, 1) >= 4  // diagonal
      || count(type, x, y, -1, 1) + 1 + count(type, x, y, 1, -1) >= 4);
}  

dx和dy检查参数用于在不同方向上移动,而不对每个方向具有单独的方法。

在水平检查代码中,您可能会通过循环将1添加到x(保持y不变,即将0添加到y)来移动到下一个片段。在垂直检查代码中,通过将1添加到y(并将0添加到x)来移动到下一个片段。要向对角线移动,你需要在x和y坐标上都加1。

 类似资料:
  • 我有一个连接四个“板”,它是一个6*7的二维字符数组,填充了空格X或o。当在垂直、水平或对角线上有四个X或四个Os在一行中时,满足win条件。我已经成功地检查了垂直和水平的win条件,其中win字符通过如下所示的一些方法返回:

  • 本文向大家介绍python中计算一个列表中连续相同的元素个数方法,包括了python中计算一个列表中连续相同的元素个数方法的使用技巧和注意事项,需要的朋友参考一下 最简单的例子: 很明显,答案是4 如果用代码实现,最先想到的就是itertools: 但是如果不想用itertools呢? 可以尝试以下的办法,效率还比itertools高一个数量级! 以上这篇python中计算一个列表中连续相同的元素

  • 问题内容: 目前,我正在开发在8x8 2D阵列板上生成随机0和1的程序。我要做的是检查对角线上的所有数字是否都相同(从角开始,而不仅仅是对角线)。 例: 因此,如果偶然从左上角(0,0),(1,1)…(7,7)开始的所有数字均为0或1,那么我必须输出到扫描仪,指示“是0“的主要对角线(来自上面的示例)。 同样从该示例中,我们可以看到从右上角向左下角对角重复数字“ 1”,然后我还必须显示“有一个较小

  • 对于每个查询,它都在n^2中运行。最大数组大小为8*10^3,最大查询数为10^5

  • 问题陈述 任务是检查在长度为N的数组中是否存在K个元素的非连续子数组,其总和等于给定的总和。 例如, 长度为 3 且 sum=7 的非连续子数组为 [1,2,4]。 限制条件: 输出 如果存在 sum=TargetSum 的子数组,我们必须返回 True,如果不可能,则必须返回 False。

  • 使用Java*** 我开始创建一个可以找到最小元素的程序。但我现在有个错误。我只懂Python,对Java非常陌生。请帮我修改代码。