Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program lksh1;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- var
- used : array[1..2000] of boolean;//ìàññèâ äëÿ äåéêñòðû
- d : array[0..2000] of integer;//ìàññèâ äëèí ìåòîê äëÿ äåéêñòðû
- d1 : array[0..2000] of string;//ìàññèâ ìåòîê
- arr : array[1..2000,1..2000] of byte;//äëèíû ñòðîê
- mas : array[1..2000,1..2000] of string ;//ñàìè ñòðîêè
- i, n, j, s, f, min, m, a, b, sum, z : integer;
- str : string;
- begin
- read(n, m);
- for i := 1 to n do
- begin
- for j := 1 to n do
- begin
- arr[i, j]:=0;
- end;
- used[i]:=false;
- d[i] := 1000000000;
- d1[i] := '*';
- end;
- //çàïîëíÿåò ìàññèâ 0
- for i := 1 to m do
- begin
- readln(a, b, str);
- if (arr[a, b]=0) or (arr[a, b]>length(str)-1) then
- begin
- arr[a, b] := length(str)-1;
- delete(str, 1, 1);
- mas[a,b] := str;
- end;
- if arr[a, b]=length(str)-1 then
- begin
- delete(str, 1, 1);
- for z:=1 to arr[a,b] do
- begin
- if str[z]>mas[a,b,z] then break
- else
- begin
- if str[z]<mas[a,b,z] then
- mas[a,b] := str;
- end;
- end;
- end;
- end;
- read(s,f);
- //ñ÷èòûâàåò âõîäíûå äàííûå
- d[s]:=0;
- d1[s]:='';
- d[0]:=1000000000;
- d1[0]:='*';
- for i:=1 to n do
- begin
- min:=0;
- for j:=1 to n do
- begin
- if (d[j]<d[min]) and (used[j]=false) then min:=j;
- end;
- if min=0 then break;
- used[min]:=true;
- for j:=1 to n do
- begin
- if (arr[min,j]>0) and (d[j]>d[min]+arr[min,j]) then
- begin
- d[j]:=d[min]+arr[min,j];
- d1[j]:=d1[min]+mas[min,j];
- end;
- if (arr[min,j]>0) and (d[j]=d[min]+arr[min,j]) then
- begin
- str:= d1[min]+mas[min,j];
- for z := 1 to d[j] do
- begin
- if ord(d1[j,z])>ord(str[z]) then
- begin
- d[j]:=d[min]+arr[min,j];
- d1[j]:=d1[min]+mas[min,j];
- end;
- end;
- end;
- end;
- end; //àëãîðèòì Äåéêñòðû
- if d[f]< 1000000000 then
- begin
- writeln(d1[f]);
- end
- else write('Impossible'); //Âîññòàíîâëåíèå ðåøåíèÿ
- readln;
- readln;
- end.
Add Comment
Please, Sign In to add comment