Есть ответ 👍

Нужно написать программу, которая подсчитывает сумму и произведение нечетных чисел,в одномерном массиве, размерностью 10

149
399
Посмотреть ответы 1

Ответы на вопрос:


// Реализация алгоритма Дейкстры (см. Вики)

// При вводе

// 6 2 3

// 255 3 7 255 255 2

// 3 255 255 255 255 255

// 7 255 255 3 1 255

// 255 255 3 255 1 2

// 255 255 1 1 255 255

// 2 255 255 2 255 255

// Выдает: 9
// Это и есть кратчайший путь

// Pascal ABC.NET

var

 gr: Array of Array of Word;

 best: Array of Word;

 proceed: Array of Boolean;

 n, s, f, last: Word;

 fIn, fOut: text;

begin

 //Init

 Assign(fIn, 'INPUT.TXT');

 Assign(fOut, 'OUTPUT.TXT');

 Reset(fIn);

 Rewrite(fOut);

 Read(fIn, n, s, f);

 Dec(s);

 Dec(f);

 SetLength(gr, n);

 for var i := 0 to n-1 do

   SetLength(gr[i], n);

 best := ArrFill(n, Word.MaxValue);

 SetLength(proceed, n);

 //Input Gr

 for var i := 0 to n-1 do

   for var j := 0 to n-1 do begin

     var buffer: Integer;

     Read(fIn, buffer);

     if buffer < 0 then

       buffer := Integer.MaxValue;

     gr[i, j] := Word(buffer);

   end;

 //Init S-node

 best[s] := 0;

 proceed[s] := true;

 last := s;

 //Algorithm

 loop n-1 do begin

   for var i := 0 to n-1 do

     if not proceed[i] then

       best[i] := Min(best[i], best[last] + gr[last][i]);

   var minim := Word.MaxValue;

   for var i := 0 to n-1 do

     if (not proceed[i]) and (best[i] < minim) then begin

       minim := best[i];

       last := i;

     end;

   proceed[last] := true;

   //PrintLn(best);

   //PrintLn(last);

 end;

 //Output

 if best[f] >= Word.MaxValue then

   WriteLn(fOut, -1)

 else

   WriteLn(fOut, best[f]);

 Close(fIn);

 Close(fOut);

end.

Популярно: Информатика