在二维数组中查找路径

时间:2018-11-04 15:58:10

标签: arrays common-lisp graph-theory shortest-path

我有一个整数的二维数组,想要在上下左右移动时,找到从左列到右列的总和最低的路径。我从所有行的 <label for="location_ips">Addresses</label> <p class="fields"> <input type="text" value="1.2.3.5" name="location[ips_attributes][0][address]" id="location_ips_attributes_0_address" /> </p> <input type="hidden" value="19" name="location[ips_attributes][0][id]" id="location_ips_attributes_0_id" /> <p class="fields"> <input type="text" value="2.3.4.5" name="location[ips_attributes][1][address]" id="location_ips_attributes_1_address" /> </p> <input type="hidden" value="20" name="location[ips_attributes][1][id]" id="location_ips_attributes_1_id" /> <p class="fields"> <input type="text" value="3.4.5.6" name="location[ips_attributes][2][address]" id="location_ips_attributes_2_address" /> </p> <input type="hidden" value="21" name="location[ips_attributes][2][id]" id="location_ips_attributes_2_id" /> <p class="fields"> <input type="text" value="9.9.9.9" name="location[ips_attributes][3][address]" id="location_ips_attributes_3_address" /> </p> <input type="hidden" value="22" name="location[ips_attributes][3][id]" id="location_ips_attributes_3_id" /> <p> <a onclick="add_fields(this, &quot;ips&quot;, &quot;&lt;p class=\&quot;fields\&quot;&gt;\n &lt;input type=\&quot;text\&quot; name=\&quot;location[ips_attributes][new_ips][address]\&quot; id=\&quot;location_ips_attributes_new_ips_address\&quot; /&gt;\n&lt;\/p&gt;\n&quot;)" href="#">add new IP address</a> </p> 开始,并尝试将路径构建为列表。

loop

我想知道这是否真的可以带来一个好的解决方案。恐怕要把整个数组放在代表所有可能路径的列表列表中,它将变得越来越复杂,内存也越来越大。据我了解,基本上是一张图。但是如何在不浪费内存的情况下从数组创建图形呢?

1 个答案:

答案 0 :(得分:3)

这似乎可以通过动态编程解决。

我将创建一个具有相同尺寸的新数组,该数组在每个坐标处都具有两个值:到达它的最佳路径及其成本。在最左边的列初始化这些值,然后一直传播到右边。

然后,向上传播每个元素路径,直至有所改善。然后离开,然后下来。循环浏览这些指示,直到没有一个改善为止。

最后,最右边一列的最佳路径是解决方案。