![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 26.12.2010
Сообщений: 39
|
![]()
{Bellman-Ford algorithm}
var a : array [1..20,1..20] of word;{matrica cmegnosti} c, pred, fl, d : array [1..20] of word;{ c - massiv kratchayshih rastoyaniy pred - massiv predidushih vershin fl - massiv flagov d - massiv dlya zapisi puti } i, j, k, n, first, last : byte; f : text;{peremennaya dlya otkritiya file in.txt} {procedura obhoda grafa vglub - dlya poiska vseh putey} Procedure Dfs(x : word); var i : byte;{lokalnay peremennaya} begin if x=last then {esli konechnaya vershina to vivodim put} begin write(first,' '); for i:=1 to j do {vivodim put} write(d[i],' '); writeln; exit;{vyhodim iz proceduri} end; fl[x]:=1;{pomechaem chto bili v vershine} for i:=1 to n do if (fl[i]=0)and(a[x,i]<>32767) then begin inc(j); d[j]:=i;{zapisivaem v put vershiny} dfs(i);{vizivaemsya ot i-oy vershini} dec(j); end; fl[x]:=0;{pomechaem chto vershina svobodna} end; {Osnovnaya programma} begin assign(f,'in.txt');{otkrivaem file dlya chteniya} reset(f); readln(f, n);{shitivaem kol-vo vershin} for i := 1 to n do for j := 1 to n do read(f, a[i,j]);{shitivaem matricy smegnosti} writeln('Matrix:'); for i:=1 to n do {vyvodim matricy na ekran} for j:=1 to n do if j=n then writeln(a[i,j]) else write(a[i,j],' '); for i:=1 to n do {zamenyaem nuli - beskonechnostuy} for j:=1 to n do if a[i,j]=0 then a[i,j]:=32767; writeln('Vvedite 1 vershiny'); readln(first); writeln('Vvedite 2 vershiny'); readln(last); close(f);{zakrivaem file in.txt} for j := 1 to n do begin c[j] := a[first,j];{zapisivaem nachalnie znacheniya} if a[first,j] < 32767 then pred[j] := first; end; for i := 3 to n do for j := 1 to n do if j <> first then for k := 1 to n do {esli ne beskonechnost i put bolee vygodniy} if (c[k] < 32767) and (c[k] + a[k,j] < c[j]) then begin c[j] := c[k] + a[k,j];{zapisivaem novoe znachenie} pred[j] := k;{zapisivaem pred vershiny} end; if c[last] = 32767 then writeln('Net putey') else begin writeln; writeln('Kratchaishiy put:'); write(first,' '); i := last; k := 1; while i <> first do {v obratnom poryadke obhodim put} begin d[k] := i;{zapisivaem put v massiv} k := k + 1; i := pred[i]; end; for i := k - 1 downto 1 do {vyvodim kratchayishiy put} write(d[i],' '); writeln; writeln('Vse puti:'); j:=0; Dfs(first);{vizivaem procedury poiska vseh putey} end; readln;readln;{gdem nagatiya klavishi} end. Это программа ищет оптимальный путь методом беллмана форда При решении в конечном итоге выводятся кратчайший путь и все возможные пути И у меня вопрос как сделать что бы выводились и нагруженность (длина) пути(ну это то что находится в матрице смежности)? кто знает подскажите плз P.S. в файле данные типа(кол. вершин и матрица смежности): 8 0 1 7 4 2 0 0 0 1 0 6 0 0 7 0 0 7 6 0 0 0 9 0 3 4 0 0 0 7 0 3 0 2 0 0 7 0 0 0 0 0 7 9 0 0 0 0 3 0 0 0 3 0 0 0 3 0 0 3 0 0 3 3 0 |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос.си | Моркковь!) | Помощь студентам | 3 | 13.06.2011 19:22 |
Вопрос по mySQL + Вопрос по RichEdit | HTL | Общие вопросы Delphi | 4 | 01.01.2010 20:22 |
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) | Albert2008 | Общие вопросы Delphi | 4 | 21.08.2008 15:33 |
вопрос по сокетам и общение как в ICQ.Сложный вопрос... | Руслантус | Общие вопросы C/C++ | 2 | 12.08.2008 21:10 |
Вопрос | Antik163RUS | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 30.07.2008 15:15 |