Python 带条件的二维网格路径搜索
假设我们有一个网格{a,b},其中n0的条目为| b-a | 如何设计通过所有条目的路径,首先访问b-a的最高值 当我们越过边界a==b时,问题就出现了,因为我需要访问所有条目,在该边界我必须返回 我的第一个想法是:Python 带条件的二维网格路径搜索,python,Python,假设我们有一个网格{a,b},其中n0的条目为| b-a | 如何设计通过所有条目的路径,首先访问b-a的最高值 当我们越过边界a==b时,问题就出现了,因为我需要访问所有条目,在该边界我必须返回 我的第一个想法是: paths = {} for a in range(n,N-1): for b in range(a+1,N): if b-a not in paths: paths[b-a] = [(a,b)] else:
paths = {}
for a in range(n,N-1):
for b in range(a+1,N):
if b-a not in paths:
paths[b-a] = [(a,b)]
else:
paths[b-a] += [(a,b)]
for p in reversed(list(paths.key())):
for q in paths[p]:
visit(q)
问题是这个解决方案对big N占用了太多的内存。我曾考虑过一个类似的解决方案,它只使用迭代器而不使用字典,但我无法正确地为使用迭代器重新设计问题
有什么建议吗
//编辑:我解决了它,对于任何感兴趣的人:
class period_iter:
def __init__(self,t0,t1):
self.t0 = t0
self.t1 = t1
def __iter__(self):
self.i = -1
self.j = 0
return self
def __next__(self):
self.i += 1
if self.i > self.j:
self.i = 0
self.j += 1
if self.j == (self.t1 - self.t0):
raise StopIteration
ti = t0 + self.i
tf = self.t1-(self.j-self.i)
return (ti,tf,tf-ti)