【发布时间】:2023-03-10 14:11:01
【问题描述】:
所以我正在写一个兔子和狼的模拟 - 一开始有一定数量的狼和兔子,兔子逃离狼,狼追逐兔子,当他们在同一个街区相遇时兔子被杀死并模拟当没有兔子离开时结束。我写了大部分代码,但是我不知道如何使兔子逃离狼,狼追逐兔子。我必须首先编写一个算法来找到最近的动物,然后计算出最佳移动(这很容易)。
动物可以在 1 个线程循环中向上、向下和交叉,例如,如果有 2 只狼离开 2 次移动,那么我必须随机化我逃离的那只(狼和追逐兔子也是如此) .
我的第一种方法是我以某种方式(可能是递归的?)从给定的动物开始搜索数组,然后像这样围绕它转圈:
所以第一次迭代它没有找到狼,第二次它找到了 2,所以它保存了它们的两个坐标,结束它的工作并将它传递给随机选择的函数。现在,我认为这将是最好的主意,但我不知道如何实现它:(我尝试了几个小时但我放弃了,因为我没有到达任何地方。
第二种方法,非常幼稚,是找到棋盘上所有的狼,然后为每一个计算到达兔子所需的移动量,然后只保存数量最少的那些。我可以编码,但我认为对于更大的电路板来说效率很低。
【问题讨论】:
-
不要低估计算机的速度。对于您正在做的事情,除非网格绝对巨大,否则这些方法中的任何一种都可以正常工作。
-
巨大的@TimB 意味着......数百万。
-
如果您的数据集很小(例如小于 1000),为了实现简单,我会采用蛮力方法,否则我会采用 O(n*logn) 方法en.wikipedia.org/wiki/Closest_pair_of_points_problem
-
好的,谢谢,我会写蛮力的,看看它是如何工作的。谢谢