我有一个整数的二维数组,想要在上下左右移动时,找到从左列到右列的总和最低的路径。我从所有行的 <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, "ips", "<p class=\"fields\">\n <input type=\"text\" name=\"location[ips_attributes][new_ips][address]\" id=\"location_ips_attributes_new_ips_address\" />\n<\/p>\n")" href="#">add new IP address</a>
</p>
开始,并尝试将路径构建为列表。
loop
我想知道这是否真的可以带来一个好的解决方案。恐怕要把整个数组放在代表所有可能路径的列表列表中,它将变得越来越复杂,内存也越来越大。据我了解,基本上是一张图。但是如何在不浪费内存的情况下从数组创建图形呢?
答案 0 :(得分:3)
这似乎可以通过动态编程解决。
我将创建一个具有相同尺寸的新数组,该数组在每个坐标处都具有两个值:到达它的最佳路径及其成本。在最左边的列初始化这些值,然后一直传播到右边。
然后,向上传播每个元素路径,直至有所改善。然后离开,然后下来。循环浏览这些指示,直到没有一个改善为止。
最后,最右边一列的最佳路径是解决方案。