在C中追逐游戏

时间:2014-01-07 19:23:25

标签: c backtracking branch-and-bound

我遇到了一个非常复杂的问题:

  

在包含鸡,鹰和院子的 MxN 字段中,   鸡试图逃离老鹰(进入院子里),   老鹰试图抓住鸡。鸡逃走了    当到达院子里面时,老鹰抓住了鸡    当它与鸡的位置相同时。只需一步,    老鹰可以移动一两个小方块,鸡可以    向任何方向移动一个方格。程序应该显示   一条消息说鸡是否能赢。它应该计算移动,    并且,在每一步,它应该在输出文件中写入当前    该字段的配置,它也应该在视觉上表示   它在屏幕上。田地的大小,鸡的位置   老鹰和院子里都有一个文件。

我已经通过创建字段(矩阵)解决了这个问题,但我无法弄清楚如何解决这个问题。也许回溯会是一个想法,但它非常复杂,我无法处理它。我想我应该找到一种方法来找出鸡和院子之间的距离,也可以找到老鹰和院子之间的距离,然后以某种方式工作。它必须在C。任何建议,想法欢迎! 提前谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个有趣的问题。我们再来看看规则吧。玩家

  1. 鸡:采用最短路径到达野外(可能有多条最短路径)并远离鹰(在最短路径中最大化自身与鹰之间的距离)。
  2. 鹰:走最短的鸡肉之路
  3. 为了解决这个问题,我们必须假设它是轮流播放的:先是鸡,然后是老鹰等等。 游戏结束时:

    1. 鹰在鸡上。
    2. 鸡在场上。
    3. 这是距离的诀窍:

      <强>更新

      您想要的距离称为Chebyshev distance。您可以轻松计算出来:

      distance = max of(difference of corresponding coordinates between the two points)

      对于(1,1)和(2,3)距离= max(| 1-2 |,| 2-3 |)= 2

      对于(2,3)和(4,7)距离= 4

      对于(4,5,6)和(1,1,1)距离= 5

      如果需要,您可以忽略旧答案。


      <强>旧

      distance = Manhattan distance - length of longest 45 deg diagonal

      曼哈顿距离很容易理解。见其wiki。举一些例子:

          ---/F
          --/-|
          -/--|
          C---X
      
          manhattan distance = 7
          length of max diagonal = 3
          distance = 7-3 = 4
      

      另一个

          ---/-F
          --/--|
          -/---|
          C----X
      
          distance = 8-3 = 5
      

      警告:请记住,可能有许多最短路径。例如。

          ---F
          --/F
          -/-F
          C--F
          -\-F
          --\F
          ---F
      

      很多地方要进3步。使用距离计算器选择距离老鹰最远的一个。 此外,如果鹰和鸡之间的距离在任何时候都比鸡和田地小,那么老鹰就会赢得其他鸡肉。只需模拟动作,你就会知道。