所以我写了一个兔子和狼的模拟-有一个设定数量的狼和兔子在开始,兔子从狼和狼追逐兔子逃跑,当他们在同一个街区相遇时兔子被杀死,当没有兔子的时候模拟结束。我写了大部分的代码,但是我不知道如何使兔子逃离狼和狼追逐兔子。我必须先写一个算法,找到最近的动物,然后计算出最好的移动(这是一个简单的部分)。
动物可以在一个线程周期内上下移动和交叉,如果有两个狼被移动了两步,那么我必须随机化我逃离的狼(狼和追兔子也是一样)。
我的第一个方法是不知何故(可能是递归?)从我的给定动物开始搜索数组,然后像这样绕着它转:
所以第一次迭代它没有找到狼,第二次它找到2,所以它保存了它们的坐标,结束它的工作,并将其传递给随机选择的函数。现在,我认为这是最好的主意,但我不知道如何实现它:(我试了几个小时,但我放弃了,因为我没有达到任何地方。
第二种方法,相当幼稚,就是在棋盘上找到所有的狼,然后为每一个计算出到达兔子所需的移动量,并只保存最小数量的狼。我可以编写代码,但我认为对于更大的董事会来说,这将是非常低效的。
最佳答案
兔子应该看看所有的狼才能活得更长。如果他从最近的那个人身边跑开-那可能是个大错误。
在这种情况下,如果沃尔夫更喜欢“向上”而不是“向右”,或者“向右”而不是“向下”(顺时针优先),他会活得很长另外,如果只有几只非随机化的狼,兔子可能会长生不老)
我能建议的最简单的逻辑是检查机上所有的wolf并选择5个最接近的,按曼哈顿抖动(dx+dy)排序,然后设为d1、d2、d3、d4、d5。
所以,让我们说“进牢房有多危险”。计算
d=d1*a+d2*b+d3*c+d4*d+d5*e
A>B>C>D>E
与当前兔细胞相邻的4个细胞。选择最小值的单元格(需要通过实验找到a、b、c、d、e)。我想你也可以给d1,d2,d3,d4,d5做一些上界。例如,狼是D4或D5真的很远-他不应该获得任何影响,所以只要使D4=D5=0。
当然,这种逻辑在这种情况下会失败
但我不认为我们能做些什么),所以这不是我们试图优化的情况