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
当然,这解决了任何无障碍的二维寻径问题。如果你知道只有一个方向在改变,那就只朝那个方向看
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)}
你的问题是,来自
x -> y
的解应该与y -> x
的解相同,也就是说,我们只对定义路径上的点感兴趣,而不是对这些点的任何顺序感兴趣。如果这是真的,那么只需找出哪个路径具有较小的x
(或y
),并将其指定为原点当然,这解决了任何无障碍的二维寻径问题。如果你知道只有一个方向在改变,那就只朝那个方向看
将step参数添加到范围中,得出start&;的符号;端差:
对y方向也要这样做
相关问题 更多 >
编程相关推荐