pascal 骑士游历 程序找错
棋盘,n*m,要求:马走的规则为:1.马走日字2.马只能向右走当N,M输入之后,找出一条从左下角到右上角的路径vardx:array[1..4]ofinteger=(1,...
棋盘,n*m,要求:
马走的规则为:1.马走日字 2.马只能向右走
当N,M 输入之后,找出一条从左下角到右上角的路径
var
dx:array[1..4]of integer=(1,2,1,2);{方向}
dy:array[1..4]of integer=(2,1,-2,-1);
n,m,a,b:integer;
xy:array[1..1000,1..2]of integer;{存储的走过的坐标}
v:array[0..100,0..100]of boolean;{是否走过}
procedure dfs(x,y,z:integer);{x,y:坐标,z:路径数}
var
xx,yy,i,j:integer;
begin
if (x=n)and(y=m)then{如果到达,输出}
begin
for j:=1 to z-1 do
writeln('(',xy[j,1],' ',xy[j,2],')');
writeln('(',n,' ',m,')');
halt;
end;
for i:=1 to 4 do
begin
xx:=x+dx[i];yy:=y+dy[i];
if (xx>0)and(xx<=n)and(yy>0)and(yy<=m)and(not v[xx,yy])then
begin
xy[z+1,1]:=xx;xy[z+1,2]:=yy;{记录可行的坐标}
v[xx,yy]:=true;
dfs(xx,yy,z+1);
v[xx,yy]:=false;{回溯}
end;
end;
end;
begin
readln(n,m);
for a:=1 to n do
for b:=1 to m do
v[a,b]:=false;
dfs(0,0,0);
end.
会加悬赏的 展开
马走的规则为:1.马走日字 2.马只能向右走
当N,M 输入之后,找出一条从左下角到右上角的路径
var
dx:array[1..4]of integer=(1,2,1,2);{方向}
dy:array[1..4]of integer=(2,1,-2,-1);
n,m,a,b:integer;
xy:array[1..1000,1..2]of integer;{存储的走过的坐标}
v:array[0..100,0..100]of boolean;{是否走过}
procedure dfs(x,y,z:integer);{x,y:坐标,z:路径数}
var
xx,yy,i,j:integer;
begin
if (x=n)and(y=m)then{如果到达,输出}
begin
for j:=1 to z-1 do
writeln('(',xy[j,1],' ',xy[j,2],')');
writeln('(',n,' ',m,')');
halt;
end;
for i:=1 to 4 do
begin
xx:=x+dx[i];yy:=y+dy[i];
if (xx>0)and(xx<=n)and(yy>0)and(yy<=m)and(not v[xx,yy])then
begin
xy[z+1,1]:=xx;xy[z+1,2]:=yy;{记录可行的坐标}
v[xx,yy]:=true;
dfs(xx,yy,z+1);
v[xx,yy]:=false;{回溯}
end;
end;
end;
begin
readln(n,m);
for a:=1 to n do
for b:=1 to m do
v[a,b]:=false;
dfs(0,0,0);
end.
会加悬赏的 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询