На рисунке справа схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о дорогах между населенными пунктами (звездочка означает, что дорога между соответствующими городами есть).
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 1 | * | * | ||||
| 2 | * | * | * | |||
| 3 | * | * | ||||
| 4 | * | * | * | * | * | |
| 5 | * | * | ||||
| 6 | * | * |
Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите номера населенных пунктов A и G в таблице. В ответе запишите числа в порядке возрастания без разделителей.
Сопоставим населённые пункты графа и населённые пункты в таблице. Нам необходимо определить номера населенных пунктов A и G. Из В ведут пять дорог. Таким образом, В — 4. Проверим первый пункт: из первого пункта есть дорога во второй, а из второго есть путь в три пункта. Получается, что D — 2. Следовательно, номера
Ответ: 35.
Приведём решение Артёма Гридина на языке Python.
from itertools import permutations
table = '24 146 45 12356 34 24'.split()
graph = 'DC DE DB CB EB BA BG AG'.split()
print('1 2 3 4 5 6')
for p in permutations('ABCDEG'):
if all(str(p.index(c2)+1) in table[p.index(c1)] for c1, c2 in graph):
print(*p)
break
Приведём решение Сергея Донец на языке PascalABC.NET.
uses School;
begin
var table:='124 2146 345 412356 534 624';
var graph:='ABG GAB BAGCDE CDB EDB DCEB';
Println(123456);
'ABCDEG'.Permutations
.Where(p->table.Translate('123456',p)
.Split.All(z->graph.Split.Any(y->y.ToHashSet=z.ToHashSet))).Print;
end.
{123456
CDABGE CDGBAE EDABGC EDGBAC
расшифровка: нужно A и G .
этим буквам соответствуют цифры 3 5. Ответ: 35.}

