![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 03.07.2010
Сообщений: 5
|
![]()
Здравствуйте, пожалуйста, помогите решить задачу. Дано N пунктов и матрица расстояний между ними. Найти кратчайший маршрут перехода из одного пункта в другой. Большое спасибо заранее.
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]() |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 03.07.2010
Сообщений: 5
|
![]()
Алгоритм понятен, спасибо. Непонятно, как выполнить обход матрицы? Не силен в синтаксисе. Подскажите.
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]()
выложите код объявления переменных, ввода матрицы и прочего, опишите функцию Dejkstra();, в которую будет передана матрица, а я вам напишу тело этой функции, не вопрос. При условии, что всё остальное увижу здесь.
|
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 03.07.2010
Сообщений: 5
|
![]() Код:
Последний раз редактировалось Stilet; 05.07.2010 в 09:00. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]()
Амм, простите, мне что-то вдруг перехотелось писать вам этот алгоритм Дейкстры. Вот, я тут порылся немного, код одной из прог, которые на 1 курсе писал, какой тут алгоритм используется я не помню (есть ещё матричный алгоритм, может быть я его использовал вместо поочерёдного запуска алгоритма Дейкстры для каждой вершины):
Код:
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]()
Точно, вспомнил, там не алгоритм Дейкстры. Алгоритм Дейкстры не работает, если есть отрицательный цикл. А у меня отрицательный цикл ищется. Следовательно скорее всего алгоритм Флойда реализован... И что-то мне подсказывает, что вот здесь, а в той функции просто результат выводится:
Код:
|
![]() |
![]() |
![]() |
#9 |
Новичок
Джуниор
Регистрация: 03.07.2010
Сообщений: 5
|
![]()
Программа выдает наименьшее расстояние между 2 и 5 пунктом. Подскажите плиз, как отобразить в листбоксе через какой пункт нужно пройти из 2 к 5-му по этому наикратчайшему расстоянию(у меня например 2->5:13, а надо 2->3->5:13). Спасибо заранее
procedure TForm15.Button1Click(Sender: TObject); var a:array[1..n,1..n] of longint;//матрица смежности b:array[1..n]of boolean;//список просмотренных вершин d:array[1..n] of longint;//расстояния между пунктами q, i, j, jmin, min, m, v: integer; begin for i := 0 to n - 1 do StringGrid1.Cells[i, i] := '0'; for i := 0 to n - 1 do for j := i + 1 to n - 1 do begin StringGrid1.Cells[i, j] := IntToStr(Random(100)); StringGrid1.Cells[j, i] := StringGrid1.Cells[i, j]; end; q := StrToIntDef(Edit1.Text, 2); //начальная вершина if (q < 1) or (q > n) then q := 1; for i := 1 to n do for j := 1 to n do a[j, i] := StrToIntDef(StringGrid1.Cells[i - 1, j - 1], -1); //Расчет fillchar(b,sizeof(b),0); fillchar(d,sizeof(d), 10000); //бесконечность d[q] := 0;//расстояние до начальной вершины for i:=1 to n do begin min:=a[v,j]; jmin:=1; m:=1000; for j:=1 to n do if ( (d[j] <= m) and (not b[j]) ) then begin m:=d[j]; v:=j; end; b[v] := true; for j:=1 to n do if ((a[v,j]<>-1)and(not b[j])and (d[v]+a[v,j]<d[j])) then d[j]:=d[v]+a[v,j]; end; //Вывод результата ListBox1.Clear; for i := 5 downto 5 do ListBox1.Items.Append(IntToStr(q) + '->' + IntToStr(i) + ': ' + IntToStr(d[i])); end; end. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 11.08.2009
Сообщений: 433
|
![]()
Алгоритм Дейкстры организован правильно, только, чтобы выводить полный путь, необходимо добавить дополнительный массив и одну строчку в в сам алгоритм:
Код:
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача в Delphi | Darkwallker | Помощь студентам | 3 | 22.12.2009 14:21 |
for (задача на Delphi) | drikusik# | Помощь студентам | 2 | 06.12.2009 20:51 |
Delphi 7. Задача | Юрий2009 | Помощь студентам | 6 | 02.05.2009 20:37 |
Задача на Delphi | Stalkon | Помощь студентам | 9 | 15.11.2008 18:48 |