我有一个包含数字的二维数组。它可能是这样的:
11211
1 31
1 111
1 11
13111
数字 1 是“墙”,2 是入口,3 是我们想要到达的点。如您所见,我们有两次出现 3,而且它们的距离并不相等。我需要找到最近的一个。请记住,输入数组是随机的,不必看起来像这样。
我正在考虑如何解决它:首先找到入口。这只能在 O(n^2) (最坏情况)时间内完成,因为入口可能位于数组中的任何位置,而不必沿着边缘。我可以毫无问题地实现这一点。
然后我需要从数组的入口点开始搜索。每当我找到数字 3 时,我都需要记住我访问过它,以及点之间的距离(示例中的 2 和 3)。假设我找到离入口最远的 3 号。这显然不是最近的点(如果我们看这个例子)。我需要跳回入口并再次搜索。我想有一种实时计数器,计算步数,这样如果我比我刚刚找到的宝藏多走一步,我就会停下来说之前找到的宝藏是最近的。
我认为有一种更好的方法可以有效地实现它,但我真的想不出该怎么做。我尝试搜索 Dijkstra 的算法,但它似乎找到了从入口到数组中所有数字的最短路径(数字是目标数字 3)。我想你可以过滤掉它们中最短的,但是你将如何在 Java 中实现它呢?
我不是在寻找完整的代码,而只是在寻找可以指导我的东西,以便我了解如何实现它。