![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
eGEN |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Репутация: ![]() ![]() ![]() |
Дан ориентированный граф, как в нем найти путь наибольшей длины. Вроде бы все просто, че-то я туплю. Помогите разобраться.
|
Altair |
![]()
Сообщение
#2
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
возьми алгоритм флойда, только измени следующим образом-
вместо если путь через i и j длиннее, чем через i-k-j то сохранить k. на если путь через i и j короче чем через i-k-j и i-k-j не бесконечность. то сохранить k. а бесканечность машинную можно задать как -1 например, только проверяй на бесконечность везде в арифметики. флойд здесь: http://forum.pascalnet.ru/index.php?s=&sh...indpost&p=40473 хотя я точно не помню, возможно такая задача решена в теории графов отдельно! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
eGEN |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Репутация: ![]() ![]() ![]() |
Так мне же для ориентированного графа нужно, а там вроде только для неориентированного. Сможешь саму процедуру Floyd именно для орграфа написать, буду очень признателен.
|
Altair |
![]()
Сообщение
#4
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Что за бред ? Ты граф задаешь матрицей смежности, просто у неориентированного графа она всегда симметрична
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
eGEN |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Репутация: ![]() ![]() ![]() |
С этим ясно......только я че-то не понимаю, вот Алгоритм Флойда:
Код Const NN=100; Type Graph = array[1..nn,1..nn] of longint; {граф задан матрицей смежности} Var n:integer; Procedure Floyd (var a:graph; c:graph; var p:graph); var i,j,k:integer; begin for i:=1 to n do for j:=1 to n do begin a[i,j]:=c[i,j]; p[i,j]:=0; end; for i:=1 to n do a[i,i]:=0; for k:=1 to n do for i:=1 to n do for j:=1 to n do If (a[i,k]+a[k,j]<a[i,j]) then begin a[i,j]:=a[i,k]+a[k,j]; p[i,j]:=k; end; end; procedure ReadGraph(var a:graph); var i,j:integer; begin write('n= ');readln(n); For i:=1 to n do for j:=1 to n do begin write('G',i,',',j,'= ');readln(a[i,j]); end; writeln; end; procedure ReadFileGraph(var a:graph); var i,j:integer; filename:string; f:text; begin Write('Enter file name:'); readln(filename); Assign (f,filename); reset(f); Readln(f,N); For i:=1 to n do for j:=1 to n do read(f,a[i,j]); close(f); end; var a,c,p:graph; i,j:integer; begin { ReadGraph( c );} ReadFileGraph( c ); floyd(a,c,p); writeln('---------------------------'); for i:=1 to n do { begin for j:=1 to n do write(a[i,j]:3); writeln end; writeln('---------------------------'); for i:=1 to n do begin for j:=1 to n do write(p[i,j]:3); writeln end; readln; end. -----------------------------------------------------0 0 1 Для примера задаю матрицу смежности 1 0 0 и получаю: -----------------------------------------------------0 1 0 -----------------------------------------------------------0 0 0 A- матрица содержащая кратчайшие пути = 0 0 0 -----------------------------------------------------------0 0 0 -----------------------------------------------------0 0 1 P - матрица, сохраняющая маршруты = 2 0 0 -----------------------------------------------------0 3 0 Помоему это явно не соответствует действительности, где ошибка, или я опять чего-то не понимаю? Сообщение отредактировано: eGEN - 21.03.2006 17:38 |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 22:24 |