标签:
设有一个N*N方格的迷宫,入口和出口分别在左上角和右上角,迷宫格子中分别放有0和1,0表示可走,1表示不能走,迷宫走的规则如图。当迷宫给出之后,找出一条从入口到出口的通路。
输入:N
N*N的迷宫
输出:具体路径
输入样例:
8
0 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
输出样例:
(1,1)-(2,1)-(3,1)-(2,2)-(1,3)-(2,4)-(3,3)-(4,3)-(5,2)-(6,3)-(7,3)-(8,2)-(8,1)
const fx:array[1..8] of longint=(0,0,-1,1,-1,-1,1,1); fy:array[1..8] of longint=(-1,1,0,0,-1,1,-1,1); type lujing=record h:longint; l:longint; end; var ditu:array[1..10,1..10] of 0..1; visited:array[1..10,1..10] of boolean; b:array[1..100] of lujing; n:longint; i,j:longint; sum:longint=0; procedure find(x,y,k:longint); var fi:longint; begin b[k].h:=x; b[k].l:=y; if (x=1) and (y=n) then inc(sum); for fi:=1 to 8 do if ((x+fx[fi]>0) and(x+fx[fi]<=n) and(fy[fi]+y>0) and(fy[fi]+y<=n) and(ditu[fx[fi]+x,fy[fi]+y]<>1) and(visited[fx[fi]+x,fy[fi]+y]=true)) then begin visited[x,y]:=false; x:=fx[fi]+x; y:=fy[fi]+y; find(x,y,k+1); x:=x-fx[fi]; y:=y-fy[fi]; if (x=1) and (y=n) then inc(sum); visited[x,y]:=true; end; end; begin read(n); fillchar(visited,sizeof(visited),true); for i:=1 to n do for j:=1 to n do read(ditu[i,j]); find(1,1,1); writeln(sum); end.
标签:
原文地址:http://www.cnblogs.com/yangqingli/p/4709279.html