【发布时间】:2013-02-08 13:17:19
【问题描述】:
问题:在有向循环图中给定一个边对象,找到前 n 个最近的边(2000)。
数据结构:链接类和节点类。链接类有一个 from 和 to 节点,指向各自的节点对象。节点对象具有链接对象的传入和传出列表。
错误:我遇到 RuntimeError: 超出最大递归深度。您能帮我找到解决方法吗?如果逻辑有问题或代码需要解决,请告诉我进行优化。我相信我遵循 BFS 策略,即从对象相关节点中创建一个队列,我可以遍历这些节点并查看它是否已被访问并尝试递归。
def start_search(self,link_object,neighbour_links):
buffer_links=[]
link_object.visited_flag=1
neighbour_links.append(link_object)
from_node=link_object.from_node
to_node=link_object.to_node
[buffer_links.append(link_object) for link_object in from_node.incoming_links]
[buffer_links.append(link_object) for link_object in from_node.outgoing_links]
[buffer_links.append(link_object) for link_object in to_node.outgoing_links]
[buffer_links.append(link_object) for link_object in to_node.incoming_links]
while len(buffer_links)>0 and len(neighbour_links)<1000:
link_object=buffer_links.pop()
if link_object.visited_flag==0:
self.start_search(link_object,neighbour_links)
return neighbour_links
【问题讨论】:
-
考虑将您的图表示为字典:successors[node] -> set([nodes])。这种形式紧凑且易于编写图算法。
标签: python algorithm breadth-first-search directed-graph