Консультация № 177333
19.03.2010, 00:46
0.00 руб.
0 1 0
здравствуйте уважаемые эксперты прошу помочь мне в Составление программы для реализации нахождения каркаса минимального веса используя Алгоритм Прима.

Обсуждение

Неизвестный
19.03.2010, 15:41
общий
"Алгоритм Прима, граф вводят с помощью списка дуг (вершины которые характеризуют дуги, и вес дуги), количетво вершин графа н : 9<н<16; кол-во дуг : 12<л<20. Должна быть возможность выбора вершины, с которой начинать строить минимальный каркас графа. В резуьтате должно получиться дуги минимального каркаса, их правильная последовательность и длина минимального каркаса." и есть программа, в которой почти все это реализованно, но кроме длины. Каk сосчитать длину мин каркаса, ума не приложу, очень надеюсь на вашу помощь код на паскале
Код:
uses crt;
var

v,l,x,y : byte;
graf1 : array[1..3 ,1..19] of integer;
graf2 : array[1..14,1..14] of byte;
sak,n,min : byte;


{ a,b,n:byte; }
Xs:byte;
{ min:byte; }
Tk:array[1..14]of boolean;
Qk:array[1..2,1..18]of byte;
Be:array[1..14,1..2]of byte;

begin
clrscr;
textbackground(white);
textcolor(green);
gotoxy(25,3);
write('Prima algoritms" ');
gotoxy(34,5);
write('39. variant');
gotoxy(33,10);
write('Press any key');

readkey;

repeat
clrscr;
gotoxy(22,8);
write('kol-vo vershin(mozhet bit' 9<n<16): ');
readln(v);
until (v>9)and(v<16);

repeat

gotoxy(24,14);
write('Kol-vo dug (mozhet bit' : 12<l<20): ');
readln(l);
until (l>12)and(l<20);


clrscr;

{ievadit Grafu-----------------------------------------------------}
gotoxy(1,5);
write('Vvedite spisok dug grafa sootvetstvenno (1 vershina dugi, 2 vershina dugi, ves dugi ');
for x:=1 to l do
begin
gotoxy(1,x+7);write('Ievadi ',x,'. loku : ');
gotoxy(21,x+7);readln(graf1[1,x]);
gotoxy(26,x+7);readln(graf1[2,x]);
gotoxy(31,x+7);readln(graf1[3,x]);
end;

{Rekini -----------------------------------------------------}

repeat
clrscr;
gotoxy(10,12);
write('vershina s kotoroj nachat' vypolnenie algoritma?:');
gotoxy(52,14);
readln(sak);
until (sak>0)and(sak<15);




for x:=1 to 15 do
Tk[x]:=false;

for x:=1 to 19 do
begin
Qk[1,x]:=0;
Qk[2,x]:=0;
end;

for x:=1 to 15 do
begin
Be[x,1]:=0;
Be[x,2]:=255;
end;

for x:=1 to v do
for y:=1 to v do
graf2[y,x]:=0;

for x:=1 to l do
begin
graf2[ graf1[1,x], graf1[2,x]]:=graf1[3,x];
graf2[ graf1[2,x], graf1[1,x]]:=graf1[3,x];
end;

{ I }
Xs:=sak; Tk[sak]:=true;

{ II }
for x:=1 to v do
if graf2[Xs,x]>0 then begin
Be[x,1]:=Xs;
Be[x,2]:=graf2[Xs,x];
end;


n:=1;
REPEAT

{ III }
min:=255;
for x:=1 to v do
if (Be[x,2]<min)and(Tk[ x ]=false) then
begin min:=Be[x,2]; Xs:=x; end;

Tk[Xs]:=true;
Qk[1,n]:=Be[Xs,1];
Qk[2,n]:=Xs;
n:=n+1;

{ IV }
for x:=1 to v do
if (graf2[Xs,x]>0)and(Tk[x]=false)and(Be[x,2]>graf2[Xs,x]) then
begin
Be[x,1]:=Xs;
Be[x,2]:=graf2[Xs,x];
end;
UNTIL n=v;

clrscr;
gotoxy(30,4); write('Minimal'nij karkas:');

for x:=1 to n-1 do
begin
gotoxy(35,x+6); write(x);
gotoxy(38,x+6); write('(',Qk[1,x],', ',Qk[2,x],')');


end;


repeat until keypressed;
readkey;
end.
Форма ответа