迷宫 pascal 深度优先搜索

现在以这题来举例(迷宫)1111010101010111记录起点为(startx,starty)找到所有的到(endx,endy)的路径.startx,starty,en... 现在以这题来举例(迷宫)
1 1 1 1
0 1 0 1
0 1 0 1
0 1 1 1
记录起点为(startx,starty)找到所有的到(endx,endy)的路径.
startx,starty,endx,endy要求输入,假定 (startx,starty)、(endx,endy)都为1。
我的程序老是只找到一条路径,求解决。
program BFS_PROJECT;
const
cx:array[1..4]of shortint=(0,0,1,-1);
cy:array[1..4]of shortint=(1,-1,0,0);
var m, endx, endy, startx, starty, t, i, j, k : byte;
a:array[1..100,1..100]of byte;
n:array[1..100]of byte;
procedure scanf;//输入
begin
readln(t);
write('start.x,start.y:'); readln(startx,starty);
write(' end.x, end.y:'); readln( endx, endy);
writeln('迷宫:');
for i := 1 to t do for j := 1 to t do read(a[i, j]);
end;
procedure dfs(x, y : shortint);//深度搜索
begin
if(x > 0)and(x < 5)and(y > 0)and(y < 5)then
if a[x,y] = 1 then
begin
a[x,y] := 2;
if(x = endx) and (y = endy)then
begin
writeln('-----------');
for i:=1 to t do
begin
for j:=1 to t do write(a[i,j], ' '); writeln;
end; inc(m);
end
else for i := 1 to 4 do dfs(x + cx[ i ],y + cy[ i ]);
a[x,y] := 1;
end;
end;
begin//主程序
scanf; dfs(startx, starty);
writeln('-----------'); writeln(m);//输出
end.
如果可以,一定要加分!!!!!!!!!!
展开
 我来答
百度网友f80d78f93
2011-07-19 · TA获得超过125个赞
知道答主
回答量:192
采纳率:0%
帮助的人:159万
展开全部
这个……楼主啊,你是新学Pascal的?
虽然有点失敬,但我还是要指出,你没有理解递归和回溯的真正意义和它的用法……
首先纠正深搜是Depth First Search 是DFS楼主这个程序名嘛……
还有就是要区分局部变量和全局变量,总之楼主差的有点多。不是三言两语就能解释清的。
谨此附上我的程序,可能算法有些啰嗦,但是还是可行的。我的变量名和格式都是尽量按照楼主的格式来的。所以理解起来好点,希望对你有帮助。

Program DFS;
Const
go:array[1..4,1..2] of integer=((-1,0),(1,0),(0,-1),(0,1));
Var
m,endx,endy,startx,starty,t,i,j,k,c:integer;
a:array[0..101,0..101] of integer;
v:array[0..101,0..101] of boolean;

Procedure Scanf;
Begin
readln(t);
write('start.x,start.y:');readln(startx,starty);
write(' end.x, end.y:');readln(endx,endy);
writeln('Migong');
for i:=1 to t do
begin
for j:=1 to t do
read(a[i,j]);
readln;
end;

For i:=0 to t+1 do
Begin
a[0,i]:=maxint;
a[t+1,i]:=maxint;
a[i,0]:=maxint;
a[t+1,i]:=maxint;
End;

fillchar(v,sizeof(v),false);
c:=2;
End;

Procedure Dfs(x,y:integer);
Var
i:integer;
Begin
if (a[x,y]=maxint) or (a[x,y]=0) or v[x,y] then exit;

v[x,y]:=true;

if (x=endx) and (y=endy) then
begin
writeln('--------');
inc(m);

for i:=1 to t do
begin
for j:=1 to t do
if v[i,j] then write(c,' ') else write(a[i,j],' ');
writeln;
end;
v[x,y]:=false;
inc(c);
exit;
end;

for i:=1 to 4 do
dfs(x+go[i,1],y+go[i,2]);

v[x,y]:=false;
End;

Begin
scanf;
dfs(startx,starty);
writeln('----------');
writeln(m);
End.
上海华然企业咨询
2024-10-21 广告
上海华然企业咨询有限公司专注于AI与数据合规咨询服务。我们的核心团队来自头部互联网企业、红圈律所和专业安全服务机构。凭借深刻的AI产品理解、上百个AI产品的合规咨询和算法备案经验,为客户提供专业的算法备案、AI安全评估、数据出境等合规服务,... 点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式