English 中文(简体)
传统“Blockbuster”的解决办法
原标题:Solution to classic "Blockbuster"
  • 时间:2009-08-25 09:30:21
  •  标签:

在联合王国,在80年代和90年代(70天我 believe!) 有一个称为“Blockbuster”的经典电视节目,像这个节目一样,在蜂蜜comb的电网上展示了六角(bl):

picture from old Blockbuster TV game
(source: ukgameshows.com)

如你所知,有5列信函和4行。 1名个人或团队正试图横向旅行,有人试图纵向旅行。 你回答一个问题,胜过六角,答案将首先从六角的信中开始。

获胜的人或团队是第一个“连接一条线”——注,可以回头(例如,如果被赢得六角的对立团队阻挡的话),这样就有很多可能获胜的组合。

几年前,当我刚刚开始脱钩时,我就在这个难题基础上写了一场会议游戏(我们这样做是为了改变主角和广场,以避免对版权的侵犯!),但我一直坚持的一点是算法,在作出一条完整路线时加以检查。 轻而易举的是罚款,但是,这些罚款、倒闭、背后,我真的 st!

最后,我基本上 co着一大批仍然赶不上一切可能情况的简便力量。 因此,我不得不在会议组织者屏幕上打一个ton子,以便他们能够迅速宣布一个赢家,如果逻辑 did不觉的话! 谈论ir草场......

现在,我想回头谈谈我不得不解决的难题,我想知道,你们中哪一位会想提出更明智的解决办法? 语言学当然(包括假冒编码都被接受)。

<><>Edit>/strong> 储存你想要的数据是值得的。 我把它拖到一个阵列。

最佳回答

http://en.wikipedia.org 紫外线可以做到这一点。

也可以采用简单的多轨办法进行,因为板块板太小,我不认为每次访问每间囚室都会对业绩产生任何明显的影响。

对于每个参与者来说,通过所有囚室进行缝.;如果囚室由参与者拥有,如果它把6个方面带至以这种填充例行公示的囚室,则囚室也照相。 再一次通过所有囚室,再一次,直到没有囚室打上目前的角色。 这里有一些假体编码:

for player in players:
  # those on the starting edge that the player owns get  marked 
  for cells in cells.start_edge(player):
    if cell.owner = player:
      cell.mark = player
  do:
    count = 0
    for cell in cells:
      if cell.mark == None && cell.owner == player:
        for adjacent in cell.neighbours:
          if adjacent.mark == player
            cell.owner = player
            count += 1
            break
  while count
  for cell in cells.stop_edge(player):
     if cell.mark == player
       player won!!

此时此刻,如果董事会适当一侧的任何囚室都属于该角色,该角色就到达了该一侧。

问题回答

trick沟是把坐标分配给每个区。

你可以做的是,它是一个简单的4x4平方网,其坐标为0至4、0至3。

计算法的责任是将奇数×电池(1和3)缩小在六角半径以下,以便它们能够适当合用。

思考每个单元的<代码>isAhost(其他)方法。 在一平方电网中,你可以证明自己是相邻的:如果是自食x = 其他.x ± 1 和自食x = 其他.x ± 1. 有8种相关的组合,分别为-1、0、1、x、-1、0、 1 用于检查。

在六角电网中,排位差不多。 如果是自食其力=其他。 另一条。 但耐药性取决于哪一栏本身。 如果X是一栏(0、2、4),则相邻的囚室为奇栏,即自负= 其他,如: 1. 同样,如果X是单列(1、3),则相邻的囚室就连一栏。 我请你在邻近地区工作。

什么是edge? 方便。 将它们列入<代码>grid.get()方法。 对于非约束性物品,将一个从未被占领的特别 du子归还。 比较更为简单。

Okay, given isAtant(? 如何找到横向或纵向连接的道路?

实际上,你希望有两种形式相邻。 页: 1 列举纵向相邻的三种数值:(自x-1,自负+y_offset),(自负x,自负+y_offset),(自负x+1,自负+y_offset)。 为列举横向相邻的数值,如果单列的数值为:(自编x+x_offset,自编),(自编x+x_offset,自封+1)。 如果是自食其力,则列入以下一栏:(自编x+x_offset, Self.y),(自编x+x_offset, Self.y-1)/code>。

这相对直截了当。 鉴于一个边缘囚室,你想朝某个方向步行“交叉”或“倒塌”。

请允许我说,你从左边走到右边(增加×)。 希望在<代码>enum_ahost_horiz名单上找到一个相邻的牢房。 为了从上到下(上到下),你在<代码>enum_adjancent_vert清单中找到一个相邻的单位。

你的问题是,两个节点是否在图表中连接。

  • You can look at the board as a non-directed "graph". Nodes are the cells and they have edges if they are adjacent cells.
  • The sides are also nodes in the graph, and those have edges to the cells adjacent to them
  • Take the sub-graph of nodes you can use (including top and bottom if checking for that player)
  • Check if the top and bottom are connected using DFS




相关问题
热门标签