Пересечение графов на Python

Если нет ни одного графа, содержащего обе точки, введенные пользователем, то найти пары графов, пути которых пересекатся и каждый содержит одну из заданных точек.

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)
    """ Далее следует найти для каждой пары найденных графов
    последовательность точек от первой введенной точки до второй.
    Т.е. для каждого графа в паре перечислить точки, находящиеся
    между заданной и до всех общих."""

  Python Tkinter: Создание окна с заголовком
Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x