Пользователь
Регистрация: 18.09.2009
Сообщений: 62
|
TurboPascal: теория графов
Доброго времени суток
Программа - исходник:
Код:
program MDP;
uses crt;
var
G,F1,F2,F3,F4,F5,F6,F7,F8,F9: set of byte;
R,M: array [1..10] of array [1..10] of integer;
Y: array [1..10] of integer;
i,j,k,n,C: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 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;
for i :=1 to 9 do begin
for j:=1 to 9 do
write(R[i,j],' ');
writeln;
end;
for j:=1 to 9 do
M[j,1]:=0;
for i:=2 to 9 do
for j:=1 to 9 do
M[j,i]:=100;
j:=1;
repeat j:=j+1;
k:=0;
for i:=1 to 9 do
if R[i,j]=1 then begin
k:=k+1;
Y[k]:=M[j-1,i]+1;
end;
C:=100;
for n:=1 to k do
if Y[n]<C then C:=Y[n];
for i:=j to 9 do
M[i,j]:=C;
until j=9;
writeln;
for j:=1 to 9 do begin
for i:=1 to 9 do
write(M[j,i],' ');
writeln;
end;
readln;
End.
Эта программа нахождения минимального пути из истока в сток на графе.
Теперь требуется: Определить длину максимального пути для графа, заданного матрицей расстояний (как сказал преподаватель это та же самая R, только вместо нулей вводить другие числа, это я сделала). Вот код:
Код:
program MDP;
uses crt;
var
G,F1,F2,F3,F4,F5,F6,F7,F8,F9: set of byte;
R,M,S: array [1..20] of array [1..20] of integer;
Y: array [1..10] of integer;
i,j,k,n,C,h,p,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;
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;
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
M[j,1]:=0;
for i:=2 to 9 do
for j:=1 to 9 do
M[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]:=M[j-1,i]+M[i,j];
end;
C:=-100;
for n:=1 to k do
if Y[n]>C then C:=Y[n];
for i:=j to 9 do
M[i,j]:=C;
until j=9;
writeln;
for j:=1 to 9 do begin
for i:=1 to 9 do
write(M[j,i],' ');
writeln;
end;
readln;
End.
Но этот код естественно работает неправильно... А кроме этого ещё надо найти вершины, лежащие на максимальном пути... Помогите хотя бы только исправить код чтобы он правильно находил максимальный путь..
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
|