我在下面写的是一个函数,用于检测具有给定起点(也是终点)的图形(以字典的形式显示)是否可以形成一个圆。 例如,graph = {1:[2,3,4],2:[1,5,6],3:[1,7,8],4:[1,9],5:[2], 6:[2],7:[3],8:[3,9],9:[4,8]}。如果起始点为3,我们可以找到一个圆:3-1-4-9-但是,如果起点为7-3,则找不到圆。 我的代码现在仅在存在圆圈的情况下给出True,在不存在圆圈的情况下则给出[]空列表。如果我想返回一个圆(不需要最长或最短的圆,只要满足条件的一个圆),该怎么办? 由于目的已经改变,所以我不确定是否可以这样思考和编码。
'''输入:图形和起点输出:列表函数:检测是否 以给定点作为起点和终点进行圆 存在'''
def cycle(graph,start_point):
queue=[start_point]
visited=set()
visited.add(queue[0])
while queue:
from_point=queue.pop() #DFS
for to_point in graph[from_point]:
if to_point in visited:
return True
else:
queue.append(to_point)
visited.add(to_point)
graph[to_point].remove(from_point)
return []