求助,程序出错
pascal吧
全部回复
仅看楼主
level 7
程序目的是在长m宽n(m,n<=100)的长方形里填充格子,从点(x1,y1)开始,(x2,y2)结束,不能走已经走过的,rt,程序在2楼,求改!
2015年08月17日 11点08分 1
level 7
var
x1,x2,y1,y2:integer;
s:boolean;
top:integer;
m,n:integer;
a:array[1..100,1..100] of boolean;
b:array[0..10000] of integer;
xd,yd,xz,yz:integer;
procedure hs;
begin
a[xd,yd]:=false;
case b[top] of
1:begin
xz:=1; yz:=0;
end;
2:begin
xz:=-1; yz:=0;
end;
3:begin
xz:=0; yz:=1;
end;
4:begin
xz:=0; yz:=-1;
end;
end;
xd:=xd-xz;
yd:=yd-yz;
b[top]:=b[top]+1;
while b[top]>4 do begin
top:=top-1;
hs;
end;
end;
procedure sc;
var
i,j:integer;
begin
for i:=1 to m do begin
for j:=1 to n do begin
if a[i,j] then write('* ')
else write('# ');
end;
writeln;
end;
end;
begin
b[0]:=7;
writeln('input m,n');
write('m=');
readln(m);
while (m<2) or (m>100) do begin
write('m=');
readln(m);
end;
write('n=');
readln(n);
while (n<2) or (n>100) do begin
write('n=');
readln(n);
end;
for x1:=1 to m do
for y1:=1 to n do
a[x1,y1]:=false;
writeln('input the first point x,y');
write('x=');
readln(x1);
while (x1>m) or (x1<0) do begin
write('x=');
readln(x1);
end;
write('y=');
readln(y1);
while (y1>n) or (y1<0) do begin
write('y=');
readln(y1);
end;
writeln('input the last point x,y');
write('x=');
readln(x2);
while (x2>m) or (x2<0) do begin
write('x=');
readln(x2);
end;
write('y=');
readln(y2);
while (y2>n) or (y2<0) do begin
write('y=');
readln(y2);
end;
xd:=x1;
yd:=y1;
s:=false;
top:=1;
b[top]:=1;
repeat
case b[top] of
1:begin
xz:=1; yz:=0;
end;
2:begin
xz:=-1; yz:=0;
end;
3:begin
xz:=0; yz:=1;
end;
4:begin
xz:=0; yz:=-1;
end;
end;
xd:=xd+xz;
yd:=yd+yz;
if (xd>m) or (yd>n) or (a[xd,yd]) or (abs(b[top]-b[top-1])=1) then begin
hs;
continue;
end
else begin
a[xd,yd]:=true;
top:=top+1;
b[top]:=1;
sc;
end;
if (xd=x2) and (yd=y2) then begin
s:=true;
for x1:=1 to m do
for y1:=1 to n do
if (a[x1,y1]=false) then begin
s:=false;
break;
end;
end;
until s;
readln;
end.
2015年08月17日 11点08分 2
level 8
没听懂题目
2015年08月18日 04点08分 3
level 11
建议发个图。。无缩进太感人。。
2015年08月19日 08点08分 4
1