深度搜索。
要注意一个地方:棋盘内每一个点都可以走。只要该点在棋盘内就可以走。
```delphi
var n,m,t,x1,y1,x2,y2,sum,xx,yy,i:longint;
a,b:array[-10..100,-10..100] of longint;
procedure try(x,y:longint);
begin
if (x=x2)and(y=y2) then inc(sum) else
begin
if (x>=1)and(y>=1)and(x+1<=n)and(y<=m)and(a[x+1,y]=0)
and(b[x+1,y]=0) then begin b[x+1,y]:=1;try(x+1,y);b[x+1,y]:=0; end;
if (x>=1)and(y>=1)and(x<=n)and(y+1<=m)and(a[x,y+1]=0)
and(b[x,y+1]=0) then begin b[x,y+1]:=1;try(x,y+1);b[x,y+1]:=0; end;
if (x-1>=1)and(y>=1)and(x<=n)and(y<=m)and(a[x-1,y]=0)
and(b[x-1,y]=0) then begin b[x-1,y]:=1;try(x-1,y);b[x-1,y]:=0; end;
if (x>=1)and(y-1>=1)and(x<=n)and(y<=m)and(a[x,y-1]=0)
and(b[x,y-1]=0) then begin b[x,y-1]:=1;try(x,y-1);b[x,y-1]:=0; end;
end;
end;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
read(n,m,t,x1,y1,x2,y2);//a[x2,y2]:=100;
for i:=1 to t do
begin
read(xx,yy);
a[xx,yy]:=1;
end;
b[x1,y1]:=1;
try(x1,y1);
write(sum);
end.
```