Решите задачу определения пути минимальной стоимости из некоторого произвольного пункта А в другой произвольный пункт Б? используя "жадный" алгоритм. Информация о длинах путей между n городами представлена матрицей расстояний R[nxn]. Суть "жадного" алгоритма состоит в выборе на каждом шаге пути наименьшей длинны до тех пор, пока не будет достигнут пункт назначения Б. Подсчитать длину пути.
Надо девушке с 4-ого курса помочь :)
Сообщений 1 страница 10 из 10
Поделиться22007-10-09 17:29:47
за бутылочку короны лайм)))
говори на каком языке писать
Поделиться32007-10-09 17:41:54
паскаль, бутылочка будет и блок схему накидаешь тогда? Зараннее спс
а вообще я не помню чтоб у нас на 4-ом такая хрень была
Поделиться42007-10-10 11:59:30
на какое мыло?
Поделиться52007-10-14 01:26:16
че то поздно я сел эту фиговину писать. потестите сами - работает\не работает?
блок схема всей программы нужна??? это фигня. её долго рисовать. если только саму реализацию алгоритма...
uses crt;
const
TownCount = 10;
MaxCost = 100;
var
CurCost : Integer; {current cost}
MinCost : Integer; {Minimal cost for step from current city}
r : array[1..TownCount,1..TownCount] of Integer;
Way : array[1..TownCount*TownCount] of Integer;
WayCount : Integer;
CurTown : Integer; {current city}
NextTown : Integer;
FilledTable : Boolean;
Answer : Char;
i,j : Integer;
istr,jstr : string;
st : string;
LastTown : Integer;
begin
clrscr;
randomize;
{fill table}
FilledTable := false;
repeat
Writeln('Fill table with random? Y\N');
Readln(Answer);
if (upcase(Answer) = 'Y') or (upcase(Answer) = 'N') then
FilledTable := true;
if FilledTable then
begin
for i := 1 to TownCount do
for j := 1 to i do
if i = j then
r[i,j] := -1
else
begin
if upcase(Answer) = 'Y' then
r[i,j] := 1 + Random(MaxCost)
else
begin
str(i,istr);
str(j,jstr);
Writeln('Cost from '+istr+' to '+jstr+': ');
repeat
read( r[i,j] );
until ( r[i,j] > 0)and( r[i,j] <= MaxCost );
end;
r[j,i] := r[i,j];
end;
end;
until FilledTable;
{show table}
Writeln('Cost table:');
Write( ' ' );
for j := 1 to TownCount do
Write( j:4 );
for i := 1 to TownCount do
begin
writeln;
write(i:2);
for j := 1 to TownCount do
Write( r[i,j]:4 );
end;
{calculate way from first to last town}
WayCount := 0;
CurTown := 1;
LastTown := TownCount;
CurCost := 0;
while ( CurTown <> LastTown) do
begin
MinCost := MaxCost + 1;
NextTown := 0;
for i := 1 to TownCount do
if ( r[i,CurTown] < MinCost) and ( r[i,CurTown]<> -1 ) then
begin
NextTown := i;
MinCost := r[i,CurTown];
end;
inc(WayCount);
Way[WayCount] := NextTown;
r[CurTown , NextTown] := -1;
r[NextTown , CurTown] := -1;
CurTown := NextTown;
inc(CurCost,MinCost);
end;
{Print results}
Writeln;
str(CurCost,st);
Writeln('Total cost:' + st);
str(WayCount,st);
Writeln('Total step count:' + st);
Writeln('Way:');
for i := 1 to WayCount do
Write(Way[i],',');
end.
Поделиться62007-10-16 11:27:19
никакого ответа...
Поделиться72007-10-19 15:29:56
ндя...
Поделиться82007-10-19 17:33:41
ну спасибо типа
как встретимся куплю пивка
Поделиться92007-10-24 17:41:58
девушка сдала?
Поделиться102007-10-25 00:58:15
нет там все намного проще надо в антил заключить. Я сам не могу сделать, хотя и не пытался. просто своих заморочек хватает, но все равно спасибо