擅长:python、mysql、java
<p>你的程序非常慢,因为这一部分需要很长时间,而且你对每个节点都要做很多次:</p>
<pre><code> for iteration in nodelist:
if iteration.pos == (i,b):
indexofnodetolinkto = iteration.index
break
</code></pre>
<p>有很多方法可以让它更快。在</p>
<p>您可以使用位置作为键将节点放入字典中,因此您只需查找一个位置即可找到其中的节点。在</p>
<p>更好的是,可以将节点放入行列表和列列表中,按位置排序,然后只尝试连接列表中的相邻节点。在</p>
<p>但最好的做法是完全忘记这些节点,直接在位图上进行BFS搜索。在</p>
<p>因为这是一个有趣的问题,我用一个简单的BFS编写了一个快速版本。我不想毁了你所有的乐趣,所以这里只是BFS部分,这样你就可以明白我直接在图像上做BFS是什么意思:</p>
^{pr2}$
<p>我们没有使用单独的对象和链接集来记住路径,而是将像素标记为直接在图像中访问过的像素。我们不需要使用任何类型的实际链接来链接一个像素到另一个像素,我们只需要检查所有4个方向,寻找相邻的白色像素。在</p>
<p>这是一个逐级的BFS,所以我们总是知道新像素离入口有多远,我们标记一个访问过的像素的颜色表示它与入口的距离(mod 3)。这使得我们在找到出口时可以重建最短路径。在</p>
<p>编辑:很长一段时间了,OP玩得很开心,下面是完整的python解算器:</p>
^{3}$