Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 50

Дана карта дорог между городами, где указана длина каждой дороги (данные не совпадают с настоящими)

19.04.2022, 22:39. Показов 1867. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана карта дорог между городами, где указана длина каждой дороги (данные не
совпадают с настоящими). Найти: а) все кратчайшие пути из Санкт-Петербурга до Омска;
б) все кратчайшие пути из Санкт-Петербурга до Магнитогорска.
Миниатюры
Дана  карта  дорог  между  городами,  где  указана  длина  каждой  дороги  (данные  не  совпадают с настоящими)  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2022, 22:39
Ответы с готовыми решениями:

Дана карта дорог между городами, где указана длина каждой дороги
Дана карта дорог между городами, где указана длина каждой дороги (данные не совпадают с настоящими). Найти: а) все кратчайшие...

Дана карта дорог между городами
Дана карта дорог между городами, где указана длина каждой дороги (данные не совпадают с настоящими). Найти: а) все кратчайшие пути из...

Дороги между городами
Между некоторыми городами есть дороги, причем некоторые дороги ведут только в одну сторону. Составьте схему движения в стране, то есть...

5
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
20.04.2022, 17:55
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
def BFS(d_edg, start, finish):
    #==========================================================================
    def get_neighbours(d_edg, node):
        res = []
        for key in d_edg:
            if node in key:
                node_ind = key.index( node )
                res.append( ( key[not node_ind], d_edg[key] ) )
        return res
    # ==========================================================================
    if start == finish:
        print('Старт совпадает с финишем.')
        return
    res     = None
    visited = []
    queue   = [ ([start],0) ]
    while queue:
        path, dist = queue.pop(0)
        node       = path[-1]
        if node not in visited:
            neighbours = get_neighbours(d_edg, node)
            for nb_city, nb_dist in neighbours:
                cur_path = path.copy()
                cur_path.append(nb_city)
                cur_dist = dist + nb_dist
                queue.append( (cur_path, cur_dist) )
 
                if nb_city == finish:
                    if not res or cur_dist < res[1]:
                        res = (cur_path, cur_dist)
            visited.append(node)
    if res:
        print( f'Кратчайший путь: ( { " -> ".join(res[0]) } ) = { res[1] } км' )
    else:
        print('Такого пути нет.')
#==============================================================================
d_edg = {
    ( 'петербург',      'горький'       ):      200,
    ( 'петербург',      'москва'        ):      150,
    ( 'москва',         'горький'       ):      100,
 
    ( 'москва',         'саратов'       ):      110,
    ( 'москва',         'ульяновск'     ):      100,
    ( 'горький',        'ульяновск'     ):      50,
 
    ( 'горький',        'свердловск'    ):      300,
    ( 'ульяновск',      'саратов'       ):      50,
    ( 'ульяновск',      'куйбышев'      ):      30,
 
    ( 'саратов',        'куйбышев'      ):      60,
    ( 'саратов',        'магнитогорск'  ):      200,
    ( 'куйбышев',       'свердловск'    ):      150,
 
    ( 'куйбышев',       'магнитогорск'  ):      90,
    ( 'свердловск',     'магнитогорск'  ):      80,
    ( 'свердловск',     'омск'          ):      80,
 
    ( 'магнитогорск',   'омск'            ):    90
}
BFS(d_edg, 'петербург', 'омск')
BFS(d_edg, 'петербург', 'магнитогорск')
0
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 50
21.04.2022, 00:09  [ТС]
Там с петербурга до омск 580 км,но там есть кратчайший путь 460 км
Как можно сделать петербург->горький->ульяновск->куйбышев->магнитогорск->омск тогда путь будет 460 км как можно так сделать
А второй путь верный
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
21.04.2022, 03:49
Цитата Сообщение от Anuarbek07070 Посмотреть сообщение
есть кратчайший путь 460 км
Вот так вроде бы нормально работает:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
def BFS( d_edg, start, finish ):
    # ==========================================================================
    def get_neighbours(d_edg, node):
        res = []
        for key in d_edg:
            if node in key:
                node_ind = key.index(node)
                res.append( (key[not node_ind], d_edg[key]) )
        return res
    # ==========================================================================
    if start == finish:
        print('Старт совпадает с финишем.')
        return
    res   = []
    queue = [ ([start], 0) ]
    while queue:
        path, dist = queue.pop(0)
        if res and dist > res[0][1]:
            continue
        node = path[-1]
        neighbours = get_neighbours(d_edg, node)
        for nb_city, nb_dist in neighbours:
            if nb_city not in path:
                cur_path = path.copy()
                cur_path.append(nb_city)
                cur_dist = dist + nb_dist
                if res and cur_dist > res[0][1]:
                    continue
                queue.append( (cur_path, cur_dist) )
                if nb_city == finish:
                    if not res or cur_dist < res[0][1]:
                        res.clear()
                        res.append( (cur_path, cur_dist) )
                    elif cur_dist == res[0][1]:
                        res.append( (cur_path, cur_dist) )
    if res:
        print()
        print('Кратчайшие пути:')
        for path, dist in res:
            print(f'( { " -> ".join(path) } ) = { dist } км')
    else:
        print('Такого пути нет.')
# ==============================================================================
d_edg = {
    ('петербург',   'горький'       ):  200,
    ('петербург',   'москва'        ):  150,
    ('москва',      'горький'       ):  100,
 
    ('москва',      'саратов'       ):  110,
    ('москва',      'ульяновск'     ):  100,
    ('горький',     'ульяновск'     ):  50,
 
    ('горький',     'свердловск'    ):  300,
    ('ульяновск',   'саратов'       ):  50,
    ('ульяновск',   'куйбышев'      ):  30,
 
    ('саратов',     'куйбышев'      ):  60,
    ('саратов',     'магнитогорск'  ):  200,
    ('куйбышев',    'свердловск'    ):  150,
 
    ('куйбышев',    'магнитогорск'  ):  90,
    ('свердловск',  'магнитогорск'  ):  80,
    ('свердловск',  'омск'          ):  80,
 
    ('магнитогорск', 'омск'         ):  90
}
 
BFS(d_edg, 'петербург', 'омск')
BFS(d_edg, 'петербург', 'магнитогорск')
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,692
Записей в блоге: 14
21.04.2022, 13:12
Я увидел "BFS", но для взвешенных графов кратчайшие пути ищутся алгоритмом Форда-Беллмана или алгоритмом Дейкстры...
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,707
21.04.2022, 14:03
Цитата Сообщение от Catstail Посмотреть сообщение
для взвешенных графов кратчайшие пути ищутся алгоритмом Форда-Беллмана или алгоритмом Дейкстры
Ну, это если надо найти кратчайшие пути из какой-то вершины до всех остальных. Для конкретного маршрута поиск в ширину вполне подходит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2022, 14:03
Помогаю со студенческими работами здесь

Количество построенных между городами дорог
Древняя рукопись В некоторой древней стране жили-были братья. Сколько их было, нам точно не известно, но в исторических источниках...

Задача на рекурсию. Найти кратчайшее расстояние между городами i и j даже если между ними нет прямой дороги
Дана матрица размером NxN с расстояниями между городами при наличии прямой дороги между ними. По вертикали содержаться города откуда...

Общее число железных дорог между городами
Всего у нас N городов, нужно посчитать общее число железных дорог между городами. Первая строка содержит число N (1&lt;=N&lt;=100). ...

В системе двухсторонних дорог за проезд каждой дороги взимается некоторая пошлина.
В системе двухсторонних дорог за проезд каждой дороги взимается некоторая пошлина. Найти путь из города А в город Б с минимальной...

Длина пути между городами
Прошу помощи в решении задачи. Я не могу поняты как это сделать потому прошу вашей помощи. Надо найти путь который прошел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru