Алгоритмы Дискретной математики, Нужна реализация |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Алгоритмы Дискретной математики, Нужна реализация |
striker |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 86 Пол: Мужской Репутация: 0 |
Я может уже повторяюсь, но мне нужна реализация алгоритма Дейкстры на pascal.
Какую-нибудь простенькую задачку (нужно разобраться). Мне нужна именно реализация алгоритма, а не сам алгоритм (я его хорошо знаю). Почти все известные алгоритмы уже разобрал, а вот Дейкстры никак не найду, а сам чё-то никак. Помогите кто чем может P.S На форуме нашел задачу, но там считывается из файла, а файл представляет из себя комбинацию цифр. Ни чё не понял Сообщение отредактировано: striker - |
striker |
Сообщение
#2
|
Пионер Группа: Пользователи Сообщений: 86 Пол: Мужской Репутация: 0 |
Вот исходник взял в FAQ:
UNIT Dijkstra; uses wincrt,dijkstra; А это содержимое файла, из которого считывается граф. 20 0 3 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 3 0 10000 10000 10000 3 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 0 2 10000 5 1 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 2 0 3 10000 10000 5 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 3 0 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 3 5 10000 10000 0 10000 10000 3 10000 10000 4 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 1 10000 10000 10000 0 10000 2 2 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 5 10000 10000 10000 0 10000 10000 4 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 3 2 10000 0 2 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 2 10000 2 0 3 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 4 10000 3 0 10000 4 10000 10000 5 10000 10000 10000 10000 10000 10000 10000 10000 10000 4 10000 10000 10000 10000 10000 0 4 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 4 4 0 4 3 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 4 0 10000 10000 3 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 3 10000 0 10000 10000 3 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 5 10000 10000 10000 10000 0 10000 4 7 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 3 10000 10000 0 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 3 4 10000 0 10000 6 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 7 10000 10000 0 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 6 10000 0 Разобрался почти во всём. Вопрос вот в чём: Как описывается в файле граф? Что это за числа(понимаю, что , но не знаю именно как перечисляются) И что происходит здесь: Код while length=0 do begin i:=1; repeat if w[t,i]<GM then begin dd:=d[t]+w[t,i]; if d[i]>dd then begin d[i]:=dd; p[i]:=t end; end; i:=i+1 until not(i<=n); Min:=GM; i:=1; k:=0; И здесь: Код begin Path[1]:=u2; length:=2; j:=u2; repeat Path[length]:=P[j]; j:=P[j]; length:=length+1 until not(j<>u1); i:=1; k:=trunc(length/2); repeat t:=Path[i]; Path[i]:=Path[length-i]; Path[length-i]:=t; i:=i+1 until not(i<=k); length:=length-1 end; Weight:=d[u2] end; Понятно, что путь ищется, но как? Вот граф Сообщение отредактировано: striker - Эскизы прикрепленных изображений |
Текстовая версия | 4.05.2024 10:21 |