На рисунке слева изображена схема дорог Н-ского района, в таблице звёздочкой обозначено наличие дороги из одного населённого пункта в другой. Отсутствие звёздочки означает, что такой дороги нет.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
| 1 | * | * | |||||
| 2 | * | * | * | ||||
| 3 | * | * | * | ||||
| 4 | * | * | |||||
| 5 | * | * | * | ||||
| 6 | * | * | * | ||||
| 7 | * | * |
Каждому населённому пункту на схеме соответствует его номер в таблице, но неизвестно, какой именно номер. Определите, какие номера населённых пунктов в таблице могут соответствовать населённым пунктам B и C на схеме. В ответе запишите эти два номера в возрастающем порядке без пробелов и знаков препинания.
Заметим, что D — единственная вершина степени 2, которая связана с вершинами степени 3 — B и C, связанными с остальными вершинами степени 2. Значит, D соответствует П4. Таким образом, населённым пунктам B и C соответствуют пункты
Ответ: 26.
Приведём решение Фёдора Мизюрёва на языке Python.
import itertools
def road():
routes = 'DB DC CE CG EG GF FA FB AB'
tab = [15, 16, 23, 24, 27, 35, 37, 46, 56]
for perm in itertools.permutations('ABCDEFG'):
temp = [perm[t // 10 - 1 ] + perm[t % 10 - 1] for t in tab]
if all([m in routes or m[::-1] in routes for m in temp]):
print(perm)
B_index = perm.index('B')
C_index = perm.index('C')
print(f"ответ:{B_index + 1}{C_index + 1}")
road()
Приведём решение Юрия Красильникова на языке Python.
def алфавит(s): return ''.join(sorted(set(s.replace(' ',''))))
# алфавит - строка из символов строки s в алфавитном порядке (кроме пробела)
def дуги(s): return set(map(алфавит,s.split()))
# дуги - множество дуг графа (пар символов), каждая пара упорядочена по алфавиту
таблица = '15 16 23 24 27 35 37 46 56' # дуги по таблице
граф = 'AB AF BD BF CD CE CG EG FG' # дуги по схеме
# Не надо бояться включить одну дугу дважды (напр., БД и ДБ). Главное - ничего не пропустить.
print(алфавит(таблица)) # заголовок
from itertools import permutations
for p in permutations(алфавит(граф)): # все возможные перестановки буквенных обозначений
табтранс = str.maketrans(''.join(p),алфавит(таблица)) # таблица трансляции
if дуги(таблица) == дуги(граф.translate(табтранс)): # если множества дуг совпадают
print(''.join(p), 'BC - ','BC'.translate(табтранс))

