讨论 / 魔兽世界过不了><~~
QZ-li 2011-08-09 02:39:00
点我顶贴 收藏 删除
const

fx:array[1..4] of longint=(-1,0,1,0);

fy:array[1..4] of longint=(0,-1,0,1);

var

a: char;

ok:array[0..1001,0..1001]of boolean;

d,f,p:array[0..100001]of longint;

i,ii,j,k,x,y,x1,y1,x2,y2,t,w:longint;

b:array[0..1001,0..1001] of longint;

q,m,n:integer;

begin

fillchar(ok,sizeof(ok),true);

readln(n,m);

for i:=1 to n do

begin

for j:=1 to m do

begin

read (a);

if a='1' then ok[i,j]:=false;

b[i,j]:=ord(a);

end;

readln;

end;

t:=0;

w:=1;

d[1]:=1;

f[1]:=1;

p[1]:=0;

ok[1,1]:=false;

while t<w do

begin

inc(t);

x:=d[t];

y:=f[t];

k:=p[t];

if (x=n) and (y=m) then begin writeln(k);halt; end;

for i:=1 to 4 do

begin

x1:=x+fx[i];

y1:=y+fy[i];

if not ok[x1,y1] then continue;

if (ok[x1,y1]) and (x1>0) and (x1<=n) and (y1>0) and (y1<=m)

and (b[x1,y1]=48)

then

begin

inc(w);

ok[x1,y1]:=false;

d[w]:=x1;

f[w]:=y1;

p[w]:=k+1;

end;

if (b[x1,y1]>=65) and (b[x1,y1]<=90) and (x1>0) and (x1<=n)

and (y1>0) and (y1<=m) and ( ok[x1,y1])

then

for ii:=1 to n do

begin

q:=0;

for j:=1 to m do

if (j<>y1) and (b[x1,y1]=b[ii,j]) or (ii<>x1) and (b[x1,y1]=b[ii,j]) then

begin

inc(w);

ok[x1,y1]:=false;

d[w]:=x1;

f[w]:=y1;

p[w]:=k+1;

q:=1;

break;

end;

if q=1 then break;

end;

end;

end;

write('No Solution.');

end.

查看更多回复
提交回复