|
{本程序假设迷宫是一个4 X 4的矩阵,入口在A[1,1],出口在A[4,4]} {矩阵数据放在文件shuju3.txt 中} program mikong; var a,b,c:array[1..4,1..4] of integer; {数组A用来存放迷宫路径,约定元素值为0表示通,1表示不通} {数组B用来存放方向增量} {数组C用来记录结果,当第I步移到某一元素时,该元素就等于I} i,j,k,m,n:integer; fv:text; q:boolean; {用来标记迷宫是否有出路}
procedure print; var m,n:integer; begin q:=true; {如果打印步骤,表示肯定有出路} writeln; writeln; writeln('穿越迷宫的步骤是:'); for m:=1 to 4 do begin for n:=1 to 4 do write(c[m,n]:4); writeln; end end;
procedure try(x,y,i:integer); var u,v,k:integer; begin for k:=1 to 4 do {可以有4个方向选择} begin u:=x+b[k,1]; {当前坐标加上方向增量} v:=y+b[k,2]; if (u>=1) and (u<=4) and (v>=1) and (v<=4) then {判断是否越界} if (a[u,v]=0) and (c[u,v]=0) then {判断是否为0,为0就表示通,为1就表示不通} begin if (x=2) and (y=3) then writeln('aaaaaaaaaaaa'); c[u,v]:=i; {数组 C打上记号,表示此元素是第I步到达} if (u<>4) or (v<>4) then {判断是否到出口} try(u,v,i+1) {没有就继续走} else print; c[u,v]:=0 {下一路所有方向都不通,清除本次所做的标记} end end end;
begin assign(fv,'shuju3.txt'); reset(fv); for i:=1 to 4 do begin for j:=1 to 4 do read(fv,a[i,j]); readln(fv) end; b[1,1]:=-1; b[1,2]:=0; b[2,1]:=0; b[2,2]:=1; b[3,1]:=1; b[3,2]:=0; b[4,1]:=0; b[4,2]:=-1; close(fv); for i:=1 to 4 do {首先标记数组C所有元素全部为0} for j:=1 to 4 do c[i,j]:=0; c[1,1]:=1; for i:=1 to 4 do {显示迷宫具体线路,0表示通,1表示不通} begin for j:=1 to 4 do write(a[i,j]:4); writeln end; q:=false; {假设迷宫没有出路} try(1,1,2); if q=false then writeln( '此迷宫没有出路') end.
|