电子老鼠闯迷宫

来源:互联网 发布:唯一网络王宇杰简介 编辑:程序博客网 时间:2024/04/30 20:32

SSLGZ-1455-电子老鼠闯迷宫/mouse.pas

题意:
12×12方格图,找出一条自入口(2,9)到出口(11,8)的最短路径。
这里写图片描述

解题思路:
用深搜,首先判断哪个方向能走,再判断有没有出界,统计走的路程,如果找到了目标点就直接输出从起点到这的路程。

const  maxn=12;  wayn=4;  dx:array[1..wayn] of integer=(-1,0,1,0);  dy:array[1..wayn] of integer=(0,1,0,-1);var  px,py,qx,qy,s,last:integer;  a:array[0..maxn+1,0..maxn+1] of integer;  father:array[1..maxn*maxn] of integer;  state:array[1..maxn*maxn,1..2] of integer;procedure init;  var    i,j,n:integer;  begin    readln(n);    read(px,py);    readln(qx,qy);    for i:=1 to n do      begin        for j:=1 to n do         read(a[i,j]);        readln;      end;  end;function check(x,y:integer):boolean;  begin    check:=true;    if (x<1) or (x>12) or (y<1) or (y>12) then check:=false;    if a[x,y]=1 then check:=false;  end;procedure print(x:integer);  begin    if x=0 then exit;    inc(s);    print(father[x]);    if x<>last then write('(',state[x,1],',',state[x,2],')->')               else writeln('(',state[x,1],',',state[x,2],')')  end;procedure bfs;  var    tail,head,k,i:integer;  begin     head:=0;tail:=1;state[1,1]:=px;state[1,2]:=py;     father[1]:=0;     repeat       head:=head+1;       for k:=1 to wayn do         if check(state[head,1]+dx[k],state[head,2]+dy[k])           then begin                  tail:=tail+1;                  father[tail]:=head;                  state[tail,1]:=state[head,1]+dx[k];                  state[tail,2]:=state[head,2]+dy[k];                  a[state[tail,1],state[tail,2]]:=1;                  if (state[tail,1]=qx) and (state[tail,2]=qy)                    then begin                           s:=0;                           last:=tail;                           print(tail);                           writeln(s);                           tail:=0;                         end;              end;    until head>=tail;  end;begin  init;  bfs;end.
1 0
原创粉丝点击