Если нет ни одного графа, содержащего обе точки, введенные пользователем, то найти пары графов, пути которых пересекатся и каждый содержит одну из заданных точек.
ffile = open ('graphs2.txt')
graphs = {}
for i in ffile:
i = i.split()
a = i[0] # ключ (название графа)
b = i[1:] # значение (список точек)
graphs[a] = b
print(graphs)
def search_points(a, b): # возвращает список графов, содержащих две указанные точки
lst = []
for i in graphs:
if a in graphs[i]:
if b in graphs[i]:
lst.append(i)
return lst
def search_cross(a, b):
lst1 = [] # графы, содержащие первую точку
lst2 = [] # графы, содержащие вторую точку
for i in graphs:
if a in graphs[i]:
lst1.append(i)
elif b in graphs[i]:
lst2.append(i)
pnts = {} # общие точки для пар графов
# Перебрать все элементы первого списка со вторым.
for i in lst1:
for j in lst2:
l1 = graphs[i] # список точек одного графа
l2 = graphs[j] # список точек второго графа
# Найти общие точки для обоих графов.
l1 = set(l1) # преобразование во множество
l2 = set(l2)
lst = l1 & l2 # пересечение множеств
lst = list(lst) # общие точки
if lst != []:
k = i + '-' + j
pnts[k] = lst
return pnts
a = input('First point: ')
b = input('Second point: ')
lst = search_points(a, b)
print(lst)
if lst == []:
pnts = search_cross(a, b)
print(pnts)
""" Далее следует найти для каждой пары найденных графов
последовательность точек от первой введенной точки до второй.
Т.е. для каждого графа в паре перечислить точки, находящиеся
между заданной и до всех общих."""