暴郁闷ing
用FP1.0.10版本
比较稳定,调试还行
可是偏偏碰上一个头疼的问题:
我的程序,虽说暴垃圾的,不过唯一的好处还是可阅读,同济1021(我菜鸟就是菜):
Code:
Type
node=Record
x,y,p:Byte;
End;Var
dat:Array[1..10000]Of node;
Map:Array[0..76,0..76]Of Boolean;
n,Ti,h,w:Byte;Procedure Init;
Var
ii,ik:Byte;
Stin:String;
Begin
FillChar(map,SizeOf(map),True);
ReadLn(w,h);
For ii:=1 To h Do
Begin
ReadLn(Stin);
For ik:=1 To w Do
If Stin[ik]=’X’
Then map[ii,ik]:=False;
End;
End;Procedure Work;
Var
Visted:Array[0..76,0..76]Of Boolean;
xo,yo:ShortInt;
Tmp:ShortInt;
Head,Top:Word;
found:Boolean;Function Adin(xd,xf:Byte;change:ShortInt):Boolean;
Begin
If Not Map[xd,xf]
Then If(xd=yo)And(xf=xo)
Then Begin
WriteLn(dat[head].p+1);
found:=True;
Exit(False);
End
Else Exit(False);
Inc(Tmp,change);
If Visted[xd,xf] Then Exit(True);
Inc(Top);
dat[Top].x:=xd;
dat[Top].y:=xf;
dat[Top].p:=dat[head].p+1;
Visted[xd,xf]:=True;
End;Begin
dat[1].x:=1;
ReadLn(dat[1].y,dat[1].x,xo,yo);
While(dat[1].x<>0)Do
Begin
Head:=1;
Top:=head;
Visted[dat[1].x,dat[1].y]:=True;
Repeat
If map[dat[1].x,dat[1].y]Or map[yo,xo]
Then Begin
WriteLn(0);
found:=True;
Break;
End;
Tmp:=dat[head].x-1;
While(Tmp>=0)And (Not found)Do If Not Adin(Tmp,dat[head].y,-1) Then Break;
Tmp:=dat[head].x+1;
While(Tmp<=h+1)And (Not found)Do If Not Adin(Tmp,dat[head].y,1) Then Break;
Tmp:=dat[head].y-1;
While(Tmp>=0)And (Not found)Do If Not Adin(dat[head].x,Tmp,-1) Then Break;
Tmp:=dat[head].y+1;
While(Tmp<=w+1)And (Not found)Do If Not Adin(dat[head].x,Tmp,1) Then Break;
Inc(head);
Until (found Or (Head>Top));
If Not found Then WriteLn(0);
found:=False;
FillChar(Visted,SizeOf(Visted),False);
FillChar(dat,10000,0);
ReadLn(dat[1].y,dat[1].x,xo,yo);
End;
End;Begin
ReadLn(n);
For Ti:= 1 To n Do
Begin
Init;
Work;
End;
End.
可是输出:
■ Free Pascal IDE Version 0.9.2
1
5 4
XXXXX
X X
XXX X
XXX
2 3 5 3
4
1 3 4 4
3
0 0 0 0//以上是调试时的输出
1
5 4
XXXXX
X X
XXX X
XXX
2 3 5 3
5
1 3 4 4
5
0 0 0 0//以上是运行的输出
头疼啊,两次输出答案不一样!我….我用FP2.1.1版本编译出来的输出结构却是:
0
4
0
我检查我的程序头都疼咯,虽说我的程序可能错咯
可是也不能错到调试的输出和运行的输出不一样啊!