测评机: Xeost[5]
得分: 80分
提交日期: 2010-10-18 21:29:00
有效耗时: 828毫秒
测试结果1: 通过本测试点|有效耗时172ms
测试结果2: 通过本测试点|有效耗时47ms
测试结果3: 通过本测试点|有效耗时46ms
测试结果4: 通过本测试点|有效耗时47ms
测试结果5: 输出过少|用户输出数据少于标准输出的50%[标准输出12位|选手输出1位]
测试结果6: 通过本测试点|有效耗时47ms
测试结果7: 测试结果错误.错误结果为:26
正确结果应为:22
测试结果8: 通过本测试点|有效耗时156ms
测试结果9: 通过本测试点|有效耗时156ms
测试结果10: 通过本测试点|有效耗时157ms
const
xx:array[1..4] of longint=(-1,0,1,0);
yy:array[1..4] of longint=(0,1,0,-1);
type
node=record
x,y,step:longint;
end;
var
n,m,i,j,head,tail,min:longint;
a:array[0..200,0..200] of char;
c:array['A'..'Z',1..2] of node;
f:array[0..1000000] of node;
v:array[0..200,0..200] of boolean;
begin
assign(input,'wow.in');reset(input);
readln(n,m);
fillchar(v,sizeof(v),true);min:=maxlongint;
for i:=1 to n do
begin
for j:=1 to m do
begin
read(a[i,j]);
if (a[i,j]<>'0')and (a[i,j]<>'1') then
begin
if c[a[i,j],1].x=0 then
begin
c[a[i,j],1].x:=i;
c[a[i,j],1].y:=j;
end else
begin
c[a[i,j],2].x:=i;
c[a[i,j],2].y:=j;
end;
end;
end;
readln;
end;
f[1].x:=1;f[1].y:=1;
f[1].step:=0;
head:=0;tail:=1;v[1,1]:=false;
while head<tail do
begin
inc(head);
if (f[head].step>=min)and(min<>maxlongint) then continue;
if (f[head].x=n)and(f[head].y=m) then
begin
if f[head].step<min then min:=f[head].step;
continue;
end;
for i:=1 to 4 do
if (f[head].x+xx[i]>0)and(f[head].x+xx[i]<n+1)
and(f[head].y+yy[i]>0)and(f[head].y+yy[i]<m+1)
and(a[f[head].x+xx[i],f[head].y+yy[i]]<>'1')and
v[f[head].x+xx[i],f[head].y+yy[i]]then
begin
inc(tail);
if a[f[head].x+xx[i],f[head].y+yy[i]]<>'0' then
begin
if (c[a[f[head].x+xx[i],f[head].y+yy[i]],1].x=f[head].x+xx[i])
and(c[a[f[head].x+xx[i],f[head].y+yy[i]],1].y=f[head].y+yy[i]) then
begin
f[tail].x:=c[a[f[head].x+xx[i],f[head].y+yy[i]],2].x;
f[tail].y:=c[a[f[head].x+xx[i],f[head].y+yy[i]],2].y;
f[tail].step:=f[head].step+1;
continue;
end else
begin
f[tail].x:=c[a[f[head].x+xx[i],f[head].y+yy[i]],1].x;
f[tail].y:=c[a[f[head].x+xx[i],f[head].y+yy[i]],1].y;
f[tail].step:=f[head].step+1;
continue;
end;
end else
begin
f[tail].x:=f[head].x+xx[i];
f[tail].y:=f[head].y+yy[i];
f[tail].step:=f[head].step+1;
v[f[tail].x,f[tail].y]:=false;
end;
end;
end;
if min=maxlongint then write('No Solution.') else
write(min);
close(input);
end.
用你的改的。。AC了。。贴下。。给分
const
xx:array[1..4] of longint=(-1,0,1,0);
yy:array[1..4] of longint=(0,1,0,-1);
type
node=record
x,y,step:longint;
end;
node2=record
x,y:longint;
end;
var
n,m,i,j,head,tail,min:longint;
a:array[1..200,1..200] of char;
c:array['A'..'Z',1..2] of node2;
f:array[1..1000000] of node;
v:array[1..200,1..200] of boolean;
procedure check;
begin
if (f[tail].x=n)and(f[tail].y=m)then
begin
writeln(f[tail].step);
close(input);
halt;
end;
end;
begin
assign(input,'wow.in');reset(input);
readln(n,m);
fillchar(v,sizeof(v),true);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(a[i,j]);
if (a[i,j]<>'0')and (a[i,j]<>'1') then
if c[a[i,j],1].x=0 then
begin
c[a[i,j],1].x:=i;
c[a[i,j],1].y:=j;
end
else
begin
c[a[i,j],2].x:=i;
c[a[i,j],2].y:=j;
end;
end;
readln;
end;
f[1].x:=1;f[1].y:=1;
f[1].step:=0;
head:=0;tail:=1;v[1,1]:=false;
while head<tail do
begin
inc(head);
for i:=1 to 4 do
if (f[head].x+xx[i]>0)and(f[head].x+xx[i]<n+1)
and(f[head].y+yy[i]>0)and(f[head].y+yy[i]<m+1)
and(a[f[head].x+xx[i],f[head].y+yy[i]]<>'1')and
v[f[head].x+xx[i],f[head].y+yy[i]]then
begin
inc(tail);
if a[f[head].x+xx[i],f[head].y+yy[i]]<>'0' then
begin
if (c[a[f[head].x+xx[i],f[head].y+yy[i]],1].x=f[head].x+xx[i])
and(c[a[f[head].x+xx[i],f[head].y+yy[i]],1].y=f[head].y+yy[i]) then
begin
f[tail].x:=c[a[f[head].x+xx[i],f[head].y+yy[i]],2].x;
f[tail].y:=c[a[f[head].x+xx[i],f[head].y+yy[i]],2].y;
f[tail].step:=f[head].step+1;
check;
continue;
end
else
begin
f[tail].x:=c[a[f[head].x+xx[i],f[head].y+yy[i]],1].x;
f[tail].y:=c[a[f[head].x+xx[i],f[head].y+yy[i]],1].y;
f[tail].step:=f[head].step+1;
check;
continue;
end;
end
else
begin
f[tail].x:=f[head].x+xx[i];
f[tail].y:=f[head].y+yy[i];
f[tail].step:=f[head].step+1;
v[f[tail].x,f[tail].y]:=false;
check;
end;
end;
end;
writeln('No Solution.');
close(input);
end.