Guest User

Untitled

a guest
Aug 2nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.55 KB | None | 0 0
  1. program lksh1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils;
  7.  
  8. var
  9.   used : array[1..2000] of boolean;//ìàññèâ äëÿ äåéêñòðû
  10.   d : array[0..2000] of integer;//ìàññèâ äëèí ìåòîê äëÿ äåéêñòðû
  11.   d1 : array[0..2000] of string;//ìàññèâ ìåòîê
  12.   arr : array[1..2000,1..2000] of byte;//äëèíû ñòðîê
  13.   mas : array[1..2000,1..2000] of string ;//ñàìè ñòðîêè
  14.   i, n, j, s, f, min, m, a, b, sum, z : integer;
  15.   str : string;
  16. begin
  17.   read(n, m);
  18.   for i := 1 to n do
  19.     begin
  20.       for j := 1 to n do
  21.         begin
  22.           arr[i, j]:=0;
  23.         end;
  24.         used[i]:=false;
  25.         d[i] := 1000000000;
  26.         d1[i] := '*';
  27.     end;
  28.   //çàïîëíÿåò ìàññèâ 0
  29.   for i := 1 to m do
  30.     begin
  31.       readln(a, b, str);
  32.       if (arr[a, b]=0) or (arr[a, b]>length(str)-1) then
  33.         begin
  34.           arr[a, b] := length(str)-1;
  35.           delete(str, 1, 1);
  36.           mas[a,b] := str;
  37.         end;
  38.       if arr[a, b]=length(str)-1 then
  39.         begin
  40.           delete(str, 1, 1);
  41.           for z:=1 to arr[a,b] do
  42.             begin
  43.               if str[z]>mas[a,b,z] then break
  44.                 else
  45.                   begin
  46.                     if str[z]<mas[a,b,z] then
  47.                       mas[a,b] := str;
  48.                   end;
  49.             end;
  50.         end;
  51.     end;
  52.   read(s,f);
  53.   //ñ÷èòûâàåò âõîäíûå äàííûå
  54.   d[s]:=0;
  55.   d1[s]:='';
  56.   d[0]:=1000000000;
  57.   d1[0]:='*';
  58.   for i:=1 to n do
  59.     begin
  60.       min:=0;
  61.       for j:=1 to n do
  62.         begin
  63.           if (d[j]<d[min]) and (used[j]=false) then min:=j;
  64.         end;
  65.       if min=0 then break;
  66.       used[min]:=true;
  67.       for j:=1 to n do
  68.         begin
  69.           if (arr[min,j]>0) and (d[j]>d[min]+arr[min,j]) then
  70.             begin
  71.               d[j]:=d[min]+arr[min,j];
  72.               d1[j]:=d1[min]+mas[min,j];
  73.             end;
  74.           if (arr[min,j]>0) and (d[j]=d[min]+arr[min,j]) then
  75.             begin
  76.               str:= d1[min]+mas[min,j];
  77.               for z := 1 to d[j] do
  78.                 begin
  79.                   if ord(d1[j,z])>ord(str[z]) then
  80.                     begin
  81.                       d[j]:=d[min]+arr[min,j];
  82.                       d1[j]:=d1[min]+mas[min,j];
  83.                     end;
  84.                 end;
  85.             end;
  86.         end;
  87.     end;        //àëãîðèòì Äåéêñòðû
  88.   if d[f]< 1000000000 then
  89.     begin
  90.       writeln(d1[f]);
  91.     end
  92.       else write('Impossible');     //Âîññòàíîâëåíèå ðåøåíèÿ
  93.   readln;
  94.   readln;
  95. end.
Add Comment
Please, Sign In to add comment