Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const
- maxsize = 30;
- Movs: array [1..8, 1..2] of integer = (
- (1, 2), (1, -2), (-1, 2), (-1, -2),
- (2, 1), (2, -1), (-2, 1), (-2, -1)
- );
- type
- TArray = array [1..maxsize, 1..maxsize] of integer;
- procedure Inp(var side, x0, y0: integer);
- var
- Fin: Text;
- begin
- assign(Fin,'input.txt');
- reset(Fin);
- readln(Fin,side,x0,y0);
- close(Fin);
- end;
- procedure Init(var A: TArray; side: integer);
- var
- i, j: byte;
- begin
- for i:=1 to side do
- for j:=1 to side do
- A[i,j]:=0;
- end;
- function Path(cur_x, cur_y, mov_num, side: integer; var desk: TArray; access: TArray): boolean;
- var
- i, next_x, next_y, x, y, min: integer;
- begin
- desk[cur_x,cur_y]:=mov_num;
- Path:=(mov_num = side*side);
- if Path then
- exit;
- min:=10;
- for i:=1 to 8 do
- begin
- next_x:=cur_x + Movs[i,1];
- next_y:=cur_y + Movs[i,2];
- if not ((next_x in [1..side]) and (next_y in [1..side])) then
- continue;
- if desk[next_x,next_y] <> 0 then
- continue;
- if (access[next_x,next_y] < min) then
- begin
- min:=access[next_x,next_y];
- x:=next_x;
- y:=next_y;
- end;
- Path:=Path(x,y,mov_num+1,side,desk,access);
- if Path then exit;
- end;
- if not Path then
- desk[cur_x, cur_y]:=0;
- end;
- procedure Outp(desk,access: TArray; side,x0,y0: integer);
- var
- i, j: integer;
- Fout: Text;
- begin
- assign(Fout,'output.txt');
- rewrite(Fout);
- if Path(x0,y0,1,side,desk,access) then
- for i:=1 to side do
- begin
- for j:=1 to side do
- write(Fout,desk[i,j]:2,' ');
- writeln(Fout);
- end
- else
- writeln(Fout,'Маршрут не существует');
- close(Fout);
- end;
- procedure MakeAxs(var A: TArray; side: integer);
- var
- k,i,j,stepx,stepy,n: integer;
- begin
- for i:=1 to side do
- for j:=1 to side do
- begin
- n:=0;
- for k:=1 to 8 do
- begin
- stepx:=i+Movs[k,1];
- stepy:=j+Movs[k,2];
- if ((stepx in [1..side]) and (stepy in [1..side])) then
- inc(n);
- end;
- A[i,j]:=n;
- end;
- end;
- var
- side, x0, y0: integer;
- desk, access: TArray;
- begin
- Inp(side,x0,y0);
- Init(desk,side);
- Init(access,side);
- MakeAxs(access,side);
- Outp(desk,access,side,x0,y0);
- end.
Advertisement
Add Comment
Please, Sign In to add comment