这题可以说是一道很基础的bfs了,
不多说,上代码:
const z:array[1..4,1..2]of -1..1=((1,0),(0,1),(-1,0),(0,-1));
var i,j,k:longint;
m,n:longint;
ans:array[0..1002,0..1002]of longint;
b:array[0..1002,0..1002]of boolean;
a:array[0..1002,0..1002]of char;
x,y:array[0..1000000]of longint;
sum,h,t,x1,y1:longint;
procedure bfs;//bfs
var i,j,k,h,t:longint;
begin
h:=1;
t:=1;
x[1]:=x1;
y[1]:=y1;
b[x1,y1]:=false;
repeat
for i:=1 to 4 do
if b[x[t]+z[i,1],y[t]+z[i,2]] and (a[x[t]+z[i,1],y[t]+z[i,2]]<>a[x[t],y[t]]) then//判断是否可以走
begin
b[x[t]+z[i,1],y[t]+z[i,2]]:=false;
inc(h);
x[h]:=x[t]+z[i,1];
y[h]:=y[t]+z[i,2];
end;
inc(t);
until t>h;
for i:=1 to h do
ans[x[i],y[i]]:=h;//记录最优解
writeln(h);
end;
begin
read(m,k);
readln;
for i:=1 to m do
begin
for j:=1 to m do
begin
read(a[i,j]);
b[i,j]:=true;
end;
readln;
end;
for i:=1 to k do
begin
readln(x1,y1);
if not b[x1,y1] then writeln(ans[x1,y1])//如果有解则输出
else bfs;//无解继续搜索
end;
end.