[Закрыть]
 
popoff.donetsk.ua
Главный принцип Фрейлинга гласит: откажитесь от намерения получить, замените его намерением дать, и вы получите то, от чего отказались.
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Основы дискретной математики - TurboPascal: теория графов, определение вершин лежащих на максимальном пути.

TurboPascal: теория графов, определение вершин лежащих на максимальном пути.

форумы popoff.donetsk.ua
Страницы: [1]
Подписаться на уведомления об изменениях в этом топике  |  << Новый  |  Старый >>  |  Ответить
Автор Сообщение
ulala
Юлёк
Дек, 2009
Сообщений: 2
ulala url://forum.message:2976
TurboPascal: теория графов, определение вершин лежащих на максимальном пути.

задание:
Определить длину максимального пути для графа, заданного матрицей расстояний. Это я сделала, вот код:

program MDP;
uses crt;
var
G,F1,F2,F3,F4,F5,F6,F7,F8,F9: set of byte;
R,M,S,B: array [1..20]  of array [1..20] of integer;
Y: array [1..10] of integer;
i,j,k,n,C,V: integer;
begin
clrscr;
G:=[1,2,3,4,5,6,7,8,9];
F1:=[2,3,4];
F2:=[3,6];
F3:=[4,5];
F4:=[5,7];
F5:=[6,8];
F6:=[9];
F7:=[8,9];
F8:=[9];
F9:=[];

for i:=1 to 9 do
for j:=1 to 9 do begin
if j in F1 then R[1,j]:=1
  else R[1,j]:=0;
if j in F2 then R[2,j]:=1
  else R[2,j]:=0;
if j in F3 then R[3,j]:=1
  else R[3,j]:=0;
if j in F4 then R[4,j]:=1
  else R[4,j]:=0;
if j in F5 then R[5,j]:=1
  else R[5,j]:=0;
if j in F6 then R[6,j]:=1
  else R[6,j]:=0;
  if j in F7 then R[7,j]:=1
  else R[7,j]:=0;
if j in F8 then R[8,j]:=1
  else R[8,j]:=0;
   if j in F9 then R[9,j]:=1
  else R[9,j]:=0;
end;
writeln('matrica smeznosti R->');
for i :=1 to 9 do begin
for j:=1 to 9 do
  write(R[i,j],' ');
  writeln;
end;

for i:=1 to 9 do
for j:=1 to 9 do begin
if R[i,j]=1 then  begin
write('Vvedite ves dugi-> ');
readln(V);
S[i,j]:=V;
end;
end;
writeln('matrica rasstoyanii L ->');
for i :=1 to 9 do begin
for j:=1 to 9 do
  write(S[i,j],' ');
  writeln;
end;

for j:=1 to 9 do
B[j,1]:=0;
for i:=2 to 9 do
for j:=1 to 9 do
B[j,i]:=-100;

j:=1;
repeat j:=j+1;

k:=0;
for i:=1 to 9 do
if S[i,j]>0 then begin
k:=k+1;
Y[k]:=B[j-1,i]+S[i,j];
end;

C:=-100; {minus beskone4nost}
for n:=1 to k do
if Y[n]>C then C:=Y[n];

for i:=j to 9 do
B[i,j]:=C;
until j=9;

writeln('opredelenie dliny maksimalnogo puti->');

for j:=1 to 9 do begin
for i:=1 to 9 do
  write(B[j,i],'   ');
  writeln;
  end;
readln;
End.

Но 2-ое задание: Найти вершины, лежащие на этом пути. Причем препод требует чтобы всё было «просто и понятно» - т.е. без флажков, goto, процедур и функций, а только с помощью массивов, циклов и на крайняк множеств (как в программе которую я написала). Сможете мне помочь? Буду очень благодарна!

Это сообщение было отредактировано popoff 29.12.09 16:55.
popoff
Yuri
Июл, 2004
Сообщений: 1078
popoff url://forum.message:3000

Юля!

Рекомендую Вам запрограммировать этот алгоритм:
Википедия: Алгоритм Флойда
http://plagiata.net.ru/?p=57

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Страницы: [1]
Подписаться на уведомления об изменениях в этом топике  |  << Новый  |  Старый >>  |  Ответить
Вход
Поиск[?]:
Гинеколог, стоматолог, психотерапевт в Донецке