You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.2 KiB

11 months ago
import numpy as np
inf = float('inf')
distances = np.array([
[inf, 72, inf, inf, 81, 67],
[72, inf, 26, inf, 61, inf],
[inf, 26, inf, 53, 97, inf],
[inf, inf, 53, inf, inf, inf],
[81, 61, 97, inf, inf, 38],
[67, inf, inf, inf, 38, inf]
])
def find_cycles(start, distances):
n = len(distances)
path = [start]
cycles = []
def is_valid(node, position):
if distances[path[position - 1]][node] == inf:
return False
if node in path:
return False
return True
def find_paths(node):
for next_node in range(n):
if is_valid(next_node, len(path)):
path.append(next_node)
if len(path) < n:
find_paths(next_node)
elif len(path) == n and distances[path[-1]][start] != inf:
cycles.append(path.copy())
path.pop()
find_paths(start)
return cycles
all_cycles = find_cycles(0, distances)
if all_cycles:
print("经过全部节点能返回起点的回路的全部路径为:")
for cycle in all_cycles:
print(cycle + [cycle[0]]) # 添加起点以形成完整的回路
else:
print("不存在经过全部节点能返回起点的回路")