我正在做一个项目,我需要执行寻路以找到成本最低的路线。我真的不在乎这是否是最短的路线。到目前为止,似乎 A* 是不可能的,老实说,我不了解 Prim 的算法。
让我解释一下我需要在哪些地图上查找路线。这是一个示例地图:
+------|-*----
+------|----|-
+--|--------|-
+@-|----------
“*”是开始位置,“@”是目的地。一行中的“+”号表示一条直接路线,它 a) 与单个步骤的成本相同,b) 整个路线的成本减半。
这意味着从起始位置通过“+”路线到目的地有 10 个“步骤”,最终成本为 5。使用最左边的“|”有 15 个步骤 路由(“|”的成本比“-”低,但比“+”差),最终成本为15。显然,成本为5的路由是要使用的路由。
现在我无法在 C# 中实现它。我目前有一个“步进”函数,如果路径被阻塞或步进成本以及新位置,它会移动并返回。这很好用,但目前它非常幼稚,因为它会下降一个“|” 如果它在“+”之前找到一个(这意味着整个行程的成本要高得多,因为它没有找到更快的路线)。
我正在考虑将每个位置标记为“已访问”,但完全有可能最低成本的路线会自行循环。还有许多不同的路径,每一个都是唯一的,并且每一个都可能使用不同的路径段(可能已经被之前的运行访问过)。显然,需要遍历每条路径才能找到最便宜的路径,但如果不一遍又一遍地搜索相同的路径,我无法弄清楚如何做到这一点。
如果它使它更简单,我可以将任何运动限制为仅向目的地移动(即,下降后不能再次返回)。
如果有人能提供一些见解,那就太好了!