迷宫问题 回朔 PASCAL

来源:百度知道 编辑:UC知道 时间:2024/05/27 11:55:17
题目:
设有一个N*N方格的迷宫,入口和出口分别在左上角和右上角,迷宫格子中分别放有0和1,0表示可走,1表示不能走,迷宫走的规则如图。当迷宫给出之后,找出一条从入口到出口的通路。
输入:N
N*N的迷宫
输出:具体路径

program ex1;
const
dy:array[1..4]of integer=(0,1,0,-1);
dx:array[1..4]of integer=(1,0,-1,0);
var
a:array[0..200,0..200]of integer;
i,j,k,l,m,n,s,x,y:integer;
procedure dfs(x,y:integer);
var
x1,y1:integer;
begin
for i:=1 to 4 do begin
x1:=x+dx[i];
y1:=y+dy[i];
if a[x1,y1]=1 then begin a[x1,y1]:=0;
if (x1=m) and (y1=n) then s:=s+1 else begin dfs(x1,y1);a[x1,y1]:=1;end;
end;end;
end;
begin
s:=0;
readln(l);
for i:=1 to l do begin
for j:=1 to l do
read(a[i,j]);
end;
readln(x,y);
readln(m,n);
fillchar(a,sizeof(a),0);
dfs(x,y);
writeln(s);
end.
有问题,不知道在哪,帮帮忙改改,thanks

整条程序都错了,题目要求输出具体路径,明显要用宽度搜索,而你输出的是最小路径,所以错了

再说了,X,Y,N,M是什么?题目有要求读入X,Y,N,M吗?没有啊

看来题目有问题,题目应该是

设有一个L*L方格的迷宫,入口和出口分别在(X,Y)和(M,N),迷宫格子中分别放有0和1,0表示可走,1表示不能走,迷宫走的规则如图。当迷宫给出之后,找出所有从入口到出口的通路。
输入:L
L*L的迷宫
x,y,m,n;
输出:全部路径

你的程序应改为:

program ex1;
const
dy:array[1..4]of integer=(0,1,0,-1);
dx:array[1..4]of integer=(1,0,-1,0);
var
a,b:array[0..200,0..200]of integer;
i,j,k,l,m,n,s,x,y:integer;
procedure dfs(x,y:integer);
var
x1,y1:integer;
begin
for i:=1 to 4 do begin
x1:=x+dx[i];
y1:=y+dy[i];
if (a[x1,y1]=0)and(b[x1,y1]=0) then begin b[x1,y1]:=1;
if (x1=m) and (y1=n) then s:=s+1 else begin dfs(x1,y1);b[x1,y1]:=0;end;
end;
end;
end;
begin
s:=0;
readln(l);
for i:=1 to l do begin
for j:=1 to l do
read(a[i,j]);
readln;
end;
readln(x,y);
readln(m,n);
fill