Задание 4. Информатика. ОГЭ. Ушаков 2025-4
- Просмотры: 14
- Изменено: 1 февраля 2025
Между населёнными пунктами \(A, \, B, \, C, \, D, \, E, \, F\) построены дороги, протяжённость которых (в километрах) приведена в таблице.
A | B | C | D | E | F | |
---|---|---|---|---|---|---|
A | 3 | 8 | 13 | 18 | ||
B | 3 | 12 | 4 | 10 | ||
C | 12 | 9 | 3 | 3 | ||
D | 8 | 4 | 9 | 4 | 11 | |
E | 13 | 10 | 3 | 4 | 8 | |
F | 18 | 3 | 11 | 8 |
Определите длину кратчайшего пути между пунктами \(A\) и \(F.\) Передвигаться можно только по дорогам, протяжённость которых указана в таблице, два раза посещать один пункт нельзя.
Решение:
Python
def dfs(graph, beg, end, vis = [], cur = 0):
vis += [beg]
if beg == end:
return cur
min_len = 10**10
for town, dist in graph[beg]:
if town not in vis:
min_len = min(min_len, dfs(graph, town, end, vis + [town], cur + dist))
return min_len
W = ((0, 3, 0, 8, 13, 18),
(3, 0, 12, 4, 10, 0),
(0, 12, 0, 9, 3, 3),
(8, 4, 9, 0, 4, 11),
(13, 10, 3, 4, 0, 8),
(18, 0, 3, 11, 8, 0))
towns = 'ABCDEF'
G = {towns[i]: [(towns[j], v) for j, v in enumerate(W[i]) if v] for i in range(6)}
print(dfs(G, 'A', 'F'))
Ответ: \(17\)