Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.08 KB | None | 0 0
  1. Var
  2.     n, s, fin, min: longint;
  3.     i, j: longint;
  4.     linkToV: longint;
  5.      
  6.     adT:    array[1..100] of array[1..100] of longint;
  7.     mT, p:  array[1..100] of int64;
  8.     f:      array[1..100] of boolean;
  9. Begin
  10.     Assign(input, 'input.txt'); Reset(input);
  11.     //INPUT
  12.     Readln(n, s, fin);
  13.     for i:= 1 to n do
  14.         for j:=1 to n do
  15.             Read(adT[i,j]);
  16.      
  17.     if (s = fin) then Writeln(0) else
  18.     begin
  19.         for i:=1 to n do
  20.             adT[i,i]:= 0;
  21.          
  22.         for i:= 1 to n do  
  23.             for j:=1 to n do
  24.             begin
  25.                 if (adT[i,j] < 0) then adT[i,j]:= maxlongint div 2;
  26.             end;
  27.         //INPUT
  28.      
  29.         //P   ARRAY CONFIG
  30.         for i:=1 to n do
  31.             p[i]:= s;
  32.         p[s]:= 0;
  33.         //P   ARRAY CONFIG
  34.      
  35.         //F   ARRAY CONFIG
  36.         for i:=1 to n do
  37.             f[i]:= false;
  38.         f[s]:= true;
  39.         //F   ARRAY CONFIG
  40.      
  41.         //mT  TABLE CONFIG
  42.         for i:=1 to n do
  43.             mT[i]:= adT[s,i];
  44.         //mT  TABLE CONFIG
  45.              
  46.             //MainCycle
  47.             for i:=1 to n do begin
  48.             {for j:=1 to n do
  49.                 Write(f[j], ' ');
  50.             Writeln;}
  51.                 //Link To V and min Select
  52.                 min:= maxlongint div 2;
  53.                 for j:=1 to n do
  54.                     if (f[j] = false) and (mT[j] < min) then
  55.                     begin
  56.                         min:= mT[j];
  57.                         linkToV:= j;
  58.                     end;
  59.                 //Link To V and min Select
  60.                 f[linkToV]:= true;
  61.                 //Configure mT Table
  62.                 for j:=1 to n do
  63.                     if (f[j] = false) and (mT[linkToV] + adT[linkToV, j] < mT[j]) then
  64.                     begin
  65.                         mT[j]:= (mT[linkToV] + adT[linkToV, j]);
  66.                         p[j]:= linkToV;
  67.                     end;
  68.                 //Configure mT Table
  69.             end;
  70.             //MainCicle
  71.         if (mT[fin] = maxlongint div 2) then Writeln(-1) else Writeln(mT[fin])
  72.     end;
  73. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement