Мне нужно написать код, который сообщает, является ли цикл Гамильтоном или нет.
Сначала у меня есть два текстовых файла:
1.file: Первая строка содержит количество вершин иребра, в то время как остальное - это пара двух соединенных вершин. Как 0 1 означает, что между этими двумя есть ребро.
2.file: строка с числами (вершинами), где мы должны проверить, является ли это циклом Гамильтона или нет.
Прежде всего, как записать график без цикловчто не направлено?Поскольку я не мог получить это, это дает мне ошибку.
Как я пытался:
def read_graph(f,l):
"""
Read a graph from a text file.
:param f: the file to read
:return: the edge-list, the starting and final vertex of path
"""
header = f.readline().split()
n, m = [int(s) for s in header]
graph = dict((i, []) for i in range(n))
for j in range(m):
edge = f.readline().split()
u, v = [int(s) for s in edge]
graph[u].append(v)
"second file"
header2=l.readline().split()
k=[]
for s in header2:
k.append(s)
graph2=dict((i,[]) for i in range (len(k)))
for g in range(len(k)-1):
edge2=l.readline().split()
w,z=[int(s) for s in edge2]
graph2[w].append(z)
return graph, graph2
......
if __name__ == '__main__':
import sys
with open(sys.argv[1], 'r') as f:
with open(sys.argv[1], 'r') as l:
graph = read_graph(f,l)
print(graph)
Второй вопрос:
Как проверить, является ли циклГамильтон или нет?Сначала я планирую проверить, действительно ли это цикл или нет, затем, если это так, то проверить, встречается ли вершина только одна.
Что еще я должен сделать, чтобы получить мой ответ, совет или более простой способ?
Спасибо, что ответили.