给定一个有向图,需要构造一个哈密顿圈。我不知道为什么程序不能正常工作。例如:
顶点 = 5
边 = 12
0 4
0 1
1 2
2 1
2 3
3 2
3 4
4 3
0 3
3 0
0 2
4 1
输出:0,1,2,3,4
预期结果:0,4,1, 2、3
n = int(input('Vertices: '))
m = int(input('Edges: '))
adj = [[0] * n for _ in range(n)]
for i in range(m):
k, l = map(int, input().split())
adj[k][l] = 1
used = [False] * n
path = []
def hamilton (v):
path.append(v)
if len(path) == n:
if adj[path[0]][path[-1]] == 1:
return True
else:
path.pop()
return False
used[v] = True
for next in range(n):
if adj[v][next] == 1 and not used[next]:
if hamilton(next):
return True
used[v] = False
path.pop()
return False
for i in range(n):
hamilton(i)
print (path)
path.clear()
程序输出一个不正确的答案,因为条件不正确
if adj[path[0]][path[-1]] == 1,应该写成if adj[path[-1]][path[0]] == 1。