Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2011, 20:28   #1
ggod
Пользователь
 
Регистрация: 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
ggod вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос.си Моркковь!) Помощь студентам 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