![]() |
|
|
![]()
|
|
| Winchester |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
у меня курсовая на данную тему.
ввод данных из файла (первая строка - количество вершин, далее как и обычная матрица) в матрицу весов. нужно найти и вывести кратчайший путь для любых двух вершин в графе если он существует. написал прогу, в которой попытался реализвовать оба эти алгоритма. *** Алгоритм Флойда работает замечательно, всё получается... и новую матрицу вычисляет правильно и путь тоже находит верный. может быть дадите совет как можно вывести все кратчайшие пути для данных двух вершин, т.к. и такое может быть... *** с алгоритмом дейкстры есть небольшие сложности... если я нахожу путь из 1 вершины во все остальные, то путь находит верный... если путь ищу из какой-то другой вершины, то программу зацикливает... глаз замылен уже и может быть просто не вижу своей ошибки... а может быть данный алгоритм находит пути только для 1-й вершины, не знаю... поэтому тоже прошу совета... *** мне надо сравнить время работы этих алгоритмов, как это можно сделать в СИ++ не знаю... очень прошу немного помочь мне разобраться в этом...
вот пара текстовых файлов с которыми я работал
Это сообщение отредактировал(а) Winchester - 23.5.2008, 13:21 |
||||||
|
|||||||
| rrrFer |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: нет Всего: 1 |
Winchester,
с алгоритмом разбираться не охото, но со временем можно так:
Это сообщение отредактировал(а) rrrFer - 23.5.2008, 13:59 |
||||
|
|||||
| esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
"может быть дадите совет как можно вывести все кратчайшие пути для данных двух вершин, т.к. и такое может быть"
Вывод всех крачайших путей превращает задачу в экспоненциальную, а по сему можно воспользоваться перебором. Перебераете ВСЕ пути, и печатаете лишь пути минимальной длины -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
А если без перебора - то так: оставляем только те рёбра, которые лежат на каком-либо кратчайшем пути (ребро (a,b) веса len лежит на кратчайшем пути из s в t, если dist(s,a) + dist(b,t) + len == dist(s,t)). После чего получим граф (ориентированный, вне зависимости от того, был ли ориентирован или нет исходный граф), в котором надо найти просто все пути, что уже решается простым перебором.
Добавлено @ 13:34 Winchester
Конечно, алгоритм Дейкстры ищет путь из любой вершины ) В коде вашем я что-то разобраться не смог, поясните хотя бы смысл трех массивов s, c, b. А вообще - в интернете полно реализаций дейкстры, в том числе и на C. Посмотрите, может вы сами быстрее поймёте ошибку. Это сообщение отредактировал(а) maxdiver - 25.5.2008, 13:34 |
|||
|
||||
| Winchester |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 6.11.2006 Репутация: нет Всего: нет |
Спасибо большое, с путями я думаю, что разберусь... там уже почти меня осинило как сделать... ваша мысль привела в точку
--- а алгоритмом дейкстры тоже разобрался... мой код работал только для тех случаев, когда путь из вершины во все остальные существует... у меня в цикле while для начала min=MAXINT, послеокончания работы цикла, если путь не найден, то значение не меняется и прога просто закливается и ищет путь снова... нужно было добавить всего одно условие if (min==MAXINT) break и тогда всё заработало отлично. между прочим на алголист об этом ни слова, я потом это уже понял после трасировки... и нашёл этот момент на википедии... --- спасибо за помощь!!!
Это сообщение отредактировал(а) Winchester - 2.6.2008, 19:53 |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |