Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
1

Графы, короткий путь

12.06.2017, 15:30. Показов 6866. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,

мне нужно написать алгоритм, вычисляющий минимальное расстояние между автобусными остановками и при этом успеть зайти в магазин. Скажем так, Вася едит с точки Б в точку А, с пересадками и по дороге хочет зайти в магазин. А магазины находятся только рядом с остановками. Как же Васе добратся в точку А самым коротким путем и при этом зайти в магазин...?

Помогите, пожалуйста, разобраться , буду очень признательна за любую помощь !
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2017, 15:30
Ответы с готовыми решениями:

Короткий путь
Помогите пожалуйста решить задачу: В каждой клетке прямоугольной таблицы NM записано некоторое...

Задача "Короткий путь"
Есть задача "Короткий путь".В кратце суть задачи-реализация алгоритма Дейкстры. И у меня есть код,...

Короткий путь
Пожалуйста, помогите с кодом! В каждой клетке прямоугольной таблицы N×M записано некоторое...

Короткий путь к файлу
Пишем простой код , для работы с файлом Вопрос , как сделать . что бы можно было , указать...

11
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109
12.06.2017, 16:47 2
Лучший ответ Сообщение было отмечено Ellie Tetka как решение

Решение

граф нарисован на картинке для более лучшего понимания происходящего )
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
dictWeight=[{
    'Bx1':4,
    'Bx2':3,
    'Bx3':3,
    },{
    'x1y1':2,
    'x1y2':4,
    },{
    'x2y1':3,
    'x2y2':4,
    },{
    'x3y1':1,
    'x3y2':2,
    },{
    'y1A':3,
    'y2A':2,
    }]
import itertools
ans={}
for graf in itertools.product(*dictWeight):
    nums,name=[],''
    for i in range(len(graf)):            
        nums.append(dictWeight[i][graf[i]])
    ans[graf]=sum(nums)
print(list(ans)[list(ans.values()).index(min(ans.values()))])
Миниатюры
Графы, короткий путь  
1
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109
12.06.2017, 16:48 3
для другого примера, отредактируйте словарики и запустите скрипт, должно сработать

з.ы. не работает для направленных графов
1
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
12.06.2017, 16:52  [ТС] 4
Спасибо Вам огромное!

Не могли бы вы мне объяснить, как это работает, построчно?

Добавлено через 2 минуты
Цитата Сообщение от Slice_ Посмотреть сообщение
для другого примера, отредактируйте словарики и запустите скрипт, должно сработать
з.ы. не работает для направленных графов
А существуют такие алгоритмы для абсолютно любых графов?
0
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109
12.06.2017, 16:54 5
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
dictWeight=[{ #задаем веса графа
    'Bx1':4,
    'Bx2':3,
    'Bx3':3,
    },{
    'x1y1':2,
    'x1y2':4,
    },{
    'x2y1':3,
    'x2y2':4,
    },{
    'x3y1':1,
    'x3y2':2,
    },{
    'y1A':3,
    'y2A':2,
    }]
import itertools
ans={} #создаем переменные
for graf in itertools.product(*dictWeight):# происходит перебор всех возможных вариантов
    nums,name=[],'' #создаем переменные
    for i in range(len(graf)):  #проходим по каждому значению       
        nums.append(dictWeight[i][graf[i]]) # записываем эти значения в массив
    ans[graf]=sum(nums) # суммируем полученные числовые значения для каждого возможного варианта
print(list(ans)[list(ans.values()).index(min(ans.values()))]) # находим минимальное значение и выводим на экран
Цитата Сообщение от Ellie Tetka Посмотреть сообщение
А существуют такие алгоритмы для абсолютно любых графов?
конечно существуют
1
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
12.06.2017, 16:56  [ТС] 6
Цитата Сообщение от Slice_ Посмотреть сообщение
#задаем веса графа
веса имеется ввиду, "длина пути", да?
0
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109
12.06.2017, 16:57 7
Ellie Tetka, да
0
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
12.06.2017, 16:58  [ТС] 8
Цитата Сообщение от Slice_ Посмотреть сообщение
itertools
и что делает intertools?

Добавлено через 41 секунду
Цитата Сообщение от Slice_ Посмотреть сообщение
ans={} #создаем переменные
а здесь мы создаем словарь?
0
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109
12.06.2017, 16:59 9
Ellie Tetka, это библиотека, которая способна делать различный перебор получаемых значений
Цитата Сообщение от Ellie Tetka Посмотреть сообщение
а здесь мы создаем словарь?
да
0
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
12.06.2017, 17:02  [ТС] 10
Python
1
2
3
4
5
6
7
8
import itertools
ans={} #создаем переменные
for graf in itertools.product(*dictWeight):# происходит перебор всех возможных вариантов
* * nums,name=[],'' #создаем переменные
* * for i in range(len(graf)): *#проходим по каждому значению * * * 
* * * * nums.append(dictWeight[i][graf[i]]) # записываем эти значения в массив, какие варианты, какие 
* * ans[graf]=sum(nums) # суммируем полученные числовые значения для каждого возможного варианта
print(list(ans)[list(ans.values()).index(min(ans.values()))]
)[/PYTHON]
очень плохо понимаю эту часть...объясните мне пожалуйста простым языком...
0
17 / 17 / 11
Регистрация: 17.03.2017
Сообщений: 109
12.06.2017, 17:11 11
Python
1
for graf in itertools.product(*dictWeight):
начинаем перебор по полученному массиву кортежей, который мы получили от itertools.product
Python
1
nums,name=[],''
создаем переменные в которые необходимо будет записать (name - лишняя, можно будет убрать)
Python
1
for i in range(len(graf)):
получаем индексы по полученному графу из первого цикла
Python
1
nums.append(dictWeight[i][graf[i]])
с помощью индексов, записываем в переменную элементы массива словарей
далее мы их суммируем и находим минимальный
0
2 / 2 / 0
Регистрация: 05.05.2017
Сообщений: 91
12.06.2017, 17:53  [ТС] 12
стало ясней, спасибо огромное))))
0
12.06.2017, 17:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2017, 17:53
Помогаю со студенческими работами здесь

Неверно находит короткий путь
Здравствуйте, решаю задачу про туриста, объехавшего 4 города и вернувшегося обратно. Необходимо...

Самый короткий путь лягушки
Лягушка прыгает по числовой прямой. Изначально она находится в точке 0. За раз она может прыгнуть...

Как рассчитать короткий путь?
Название секторов <div><div style='position:relative;top:0;left:0;z-index:0;'> <table...

Обход массива и короткий путь
Здравствуйте, помогите решить задачу Нужно обойти массив и найти в нем кротчайший путь.

Как получить короткий путь к программе?
Как из пути типа C:Program FilesAccessorieswordpad.exe получить путь типа...

Самый короткий путь и максимальный потом
Самый короткий путь и максимальный поток через граф Правила форума, пункт 4.3. Создавайте темы с...

Есть ли короткий путь решения задачи?
Даны три действительных числа. Возвести в квадрат те из них, значения которых неотрицательны. ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru