讨论 / 帮忙改一下。。。。
649273254 2010-10-18 17:17:00
点我顶贴 收藏 删除
Unaccepted

测评机: 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.

#1 407137009@2010-10-18 06:37:00
回复 删除
回复 楼主649273254 的帖子

出口部分写的够烂。。改好了给分-。-

#2 407137009@2010-10-18 17:17:00
回复 删除
回复 楼主649273254 的帖子

用你的改的。。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.

查看更多回复
提交回复