📄 pr137.pas
字号:
program pr137;
const x:array[1..8] of integer=(-2,-1,1,2,2,1,-1,-2);
y:array[1..8] of integer=(1,2,2,1,-1,-2,-2,-1);
type stiva=array[1..100,1..3] of integer;
var st,st1:stiva;
n,x0,y0,x1,y1,l,c,k,i,j,q,p,min:integer;
as,ev:boolean;
a:array[1..20,1..20] of integer;
procedure init(var st:stiva;k:integer);
begin
st[k,1]:=0;
end;
procedure succesor(var st:stiva;k:integer;var as:boolean);
begin
if st[k,1]<8 then
begin
inc(st[k,1]);
as:=true;
end
else
as:=false;
end;
procedure valid(st:stiva;k:integer;var ev:boolean);
begin
ev:=true;
l:=st[k,2] +x[st[k,1]];
c:=st[k,3]+y[st[k,1]];
if (l<1) or (l>n) or (c<1) or (c>n) then ev:=false;
for i:=1 to k do
if (st[i,2]=l) and(st[i,3]=c) then ev:=false;
if a[l,c]=1 then ev:=false;
end;
function solutie(st:stiva;k:integer):boolean;
begin
solutie:=(st[k,2]=x1) and(st[k,3]=y1)
end;
procedure tipar(st:stiva;k:integer);
var i,j:integer;
begin
for i:=1 to k do
write(st[i,2],' ',st[i,3]);
end;
function optim(st:stiva;k:integer):boolean;
begin
optim:=false;
if k<min then
begin
st1:=st;
min:=k;
optim:=true;
end;
end;
begin
write('n= ');readln(n);
write('x0=');readln(x0);
write('y0=');readln(y0);
write('x1=');readln(x1);
write('y1=');readln(y1);
write('p=');readln(p);
min:=maxint;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=0;
for q:=1 to p do
begin
write('i=');
readln(i);
write('j=');
readln(j);
a[i,j]:=1;
end;
k:=1;
init(st,k);
st[k,2]:=x0;
st[k,3]:=y0;
while k>0 do
begin
repeat
succesor(st,k,as);
if as then valid(st,k,ev);
until (not as) or(as and ev);
if as then begin
inc(k);
init(st,k);
st[k,2]:=l;
st[k,3]:=c;
if solutie(st,k) then if optim(st,k) then tipar(st1,min);
end
else dec(k);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -