我必须找到从 D 点到 R 点的最短路径。这些是固定点。这是一个例子:
盒子还包含墙壁,除非你打破它们,否则你无法穿过它们。每破墙都会花费你,比如说“a”点,其中“a”是一个正整数。每一个不涉及墙的动作都会花费你1分。
任务是找出所有成本最低的路径,即破墙数量最少的路径。
由于框的宽度可以达到 100 个单元格,因此使用回溯是无关紧要的。它太慢了。我想出的唯一解决方案是这个:
- 如果没有墙壁,向东或向南
- 如果南有墙,检查西是否有墙。西有墙,破南墙。如果西边没有墙,就往西走,直到你找到一个没有墙的南边牢房。对南部和东部重复此过程,直到您按此顺序超过破墙的成本。如果从西边的路径进入同一个地方,就好像我打破了南墙并且花费相同或小于“a”点,那么使用这条路径,否则刹车南墙。
- 如果上面没有遇到,根据盒子边界来制动南墙或东墙。
重复步骤 1、2、3,直到“乘客”到达 R 点。这 3 个步骤之间存在“else-if”关系。
你能想出一个更好的问题算法吗?我用 C++ 编程。