这题是找最多走过了格数,可以用dfs
const z:array[1..4,1..2]of -1..1=((0,1),(0,-1),(1,0),(-1,0));//呀,方便啊
var i,j,k,x,y:longint;
m,n,max:longint;
a:array[0..200,0..200]of 0..2;//记录所用的表格
s:string;
procedure dfs(x,y,fx,sum:longint);//DFS-QAQ
var i,j:longint;
begin
if a[x,y]=1 then
begin
if sum>max then max:=sum;
if a[x+z[fx,1],y+z[fx,2]]=1 then//如果可以的话一直向前走QAQ
begin
a[x,y]:=2;
dfs(x+z[fx,1],y+z[fx,2],fx,sum+1);//dfs
a[x,y]:=1;
end
else
begin
a[x,y]:=2;
if a[x+z[fx,1],y+z[fx,2]]=0 then
begin
if fx in [1..2] then//根据方向查找,不可以走相反方向和相同方向
begin
if a[x+z[4,1],y+z[4,2]]=1 then
dfs(x+z[4,1],y+z[4,2],4,sum+1);//dfs
if a[x+z[3,1],y+z[3,2]]=1 then
dfs(x+z[3,1],y+z[3,2],3,sum+1);//dfs
end
else
begin
if a[x+z[1,1],y+z[1,2]]=1 then
dfs(x+z[1,1],y+z[1,2],1,sum+1);//dfs
if a[x+z[2,1],y+z[2,2]]=1 then
dfs(x+z[2,1],y+z[2,2],2,sum+1);//dfs__QAQ
end;
end;
a[x,y]:=1;//已经走过了
end;
end;
end;
begin
read(n,m);
for i:=1 to n do
for j:=1 to n do
a[i,j]:=1;
readln;
for i:=1 to m do
begin
readln(s);//读入麻烦一点
x:=ord(s[1])-ord('A')+1;
y:=ord(s[2])-ord('0');
if length(s)>=3 then
y:=y*10+ord(s[3])-ord('0');
if length(s)>=4 then
y:=y*10+ord(s[4])-ord('0');
a[y,x]:=0;
end;
for i:=1 to 4 do//四个方向查找
begin
dfs(1,1,i,1);
end;
write(max);//输出最大的解就可以了QAQ
end.
平时BFS写多了,来一道DFS也不错