擅长:python、mysql、java
<p>你的问题是,来自<code>x -> y</code>的解应该与<code>y -> x</code>的解相同,也就是说,我们只对定义路径上的点感兴趣,而不是对这些点的任何顺序感兴趣。如果这是真的,那么只需找出哪个路径具有较小的<code>x</code>(或<code>y</code>),并将其指定为原点</p>
<pre><code>origin = (3,3)
dest = (1,3)
origin, dest = sorted([origin, dest])
path = {(i,j) for i in range(origin[0], dest[0]+1) for j in range(origin[1], dest[1]+1)}
# note that this is now a set comprehension, since it doesn't make any sense
# to use a list of unique hashable items whose order is irrelevant
</code></pre>
<p>当然,这解决了任何无障碍的二维寻径问题。如果你知道只有一个方向在改变,那就只朝那个方向看</p>
<pre><code>origin, dest = sorted((origin, dest))
if origin[0] == dest[0]: # y is changing
path = {(origin[0], j) for j in range(origin[1], dest[1]+1)}
else: # x is changing
path = {(i, origin[1]) for i in range(origin[0], dest[0]+1)}
</code></pre>