На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
| П1 | П2 | П3 | П4 | П5 | П6 | П7 | |
| П1 | 39 | 3 | |||||
| П2 | 39 | 8 | 5 | ||||
| П3 | 3 | 2 | |||||
| П4 | 8 | 53 | |||||
| П5 | 5 | 21 | 30 | ||||
| П6 | 2 | 21 | 13 | ||||
| П7 | 53 | 30 | 13 |
Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта D в пункт B и из пункта F в пункт A.
В ответе запишите целое число.
Заметим, что B — единственная вершина степени 2, не связанная с другими вершинами степени 2. Значит, вершина B соответствует П4. Вершина F — единственная вершина степени 3, связанная с двумя вершинами степени 2. Следовательно, вершина F соответствует П2. Вершина B связана только с вершинами F и D, значит, вершина D соответствует П7. Вершина A — единственная вершина степени 3, связанная и с вершиной D, и с вершиной F. Следовательно, вершина A соответствует П5.
Тогда сумма протяжённостей дорог из пункта D в пункт B и из пункта F в пункт A равна 53 + 5 = 58.
Ответ: 58.
Приведём другое решение Красильникова Юрия языке Python.
import itertools
graph={'A':'DEF','B':'DF','C':'FG','D':'ABE','E':'ADG','F':'ABC','G':'CE'}
matrix=(
'.WW....' +
'W..WW..' +
'W....W.' +
'.W....W' +
'.W...WW' +
'..W.W.W' +
'...WWW.' )
for p in itertools.permutations(graph):
mymatrix = ''
for x in p:
for y in p:
mymatrix += 'W' if y in graph[x] else '.'
if matrix==mymatrix:
print(p) #Названия населенных пунктов выводятся по порядку, первая буква — первый пункт, вторая — второй и т. д.
Приведём решение Юрия Красильникова на языке Python.
def алфавит(s): return ''.join(sorted(set(s.replace(' ',''))))
# алфавит - строка из символов строки s в алфавитном порядке (кроме пробела)
def дуги(s): return set(map(алфавит,s.split()))
# дуги - множество дуг графа (пар символов), каждая пара упорядочена по алфавиту
таблица = '12 13 24 25 36 47 56 57 67' # дуги по таблице
граф ='AD AE AF BD BF CF CG DE EG' # дуги по схеме
# Не надо бояться включить одну дугу дважды (напр., БД и ДБ). Главное - ничего не пропустить.
print(алфавит(таблица)) # заголовок
from itertools import permutations
for p in permutations(алфавит(граф)): # все возможные перестановки буквенных обозначений
табтранс = str.maketrans(''.join(p),алфавит(таблица)) # таблица трансляции
if дуги(таблица) == дуги(граф.translate(табтранс)): # если множества дуг совпадают
print(''.join(p),
'DB -','DB'.translate(табтранс),
'FA -','FA'.translate(табтранс))
Дорога DB - это дорога 74 длиной 53, дорога FA - это дорога 25 длиной 5. Сумма длин этих дорог - 58.

