1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| eGEN |
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Репутация: 0 |
Дан ориентированный граф, как в нем найти путь наибольшей длины. Вроде бы все просто, че-то я туплю. Помогите разобраться.
|
![]() ![]() |
| eGEN |
Сообщение
#2
|
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Репутация: 0 |
С этим ясно......только я че-то не понимаю, вот Алгоритм Флойда:
Код 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 - |
eGEN Задача о максимальном (длиннейшем) пути в орграфе 19.03.2006 20:38
Altair возьми алгоритм флойда, только измени следующим об… 19.03.2006 21:12
eGEN Так мне же для ориентированного графа нужно, а там… 19.03.2006 23:58
Altair Что за бред ? Ты граф задаешь матрицей смежности, … 20.03.2006 3:42![]() ![]() |
|
Текстовая версия | 21.12.2025 5:09 |