jzxx1925【基础】走迷宫 DFS
1925: 【基础】走迷宫
时间限制: 1 Sec 内存限制: 32 MB提交: 234 解决: 110
[提交][状态][讨论版]
题目描述
迷宫由N*N个方格组成,每个方格均被组织者事先标上了“0”或“1”(左上角第一个方格和右下角最后一个方格一定是“0”)。当你进入左上角的第一个方格中时,看到相邻的方格是“0”时则可以进入,而如果是“1”时则表示此路不通。兔兔被告之:从迷宫的左上角第一个方格的入口处准备进入时,你可得到一个记有N*N分值的记分表,每经过一个标有“0”的方格,记分表将自动扣去1分,当走到右下角最后一个方格的出口处时,将显示你手中的记分表剩余的分值。夏令营的组织者将只奖励所有参加此项活动中,记分表剩余的分值最多的营员。
输入
第一行是一个整数N(3≤N≤40),接下来有N行,每行均有N个由0 和1组成的数据
输出
包括一个整数(记分表剩余的分值)
样例输入
4
0011
1000
0001
1000
样例输出
9
const dx:array[1..4] of longint=(1,0,-1,0); dy:array[1..4] of longint=(0,1,0,-1); var x,y,step,i,j,n:longint; a:array[0..110,0..110] of longint; c:char; procedure DFS(x,y,s:longint); var i:longint; begin //找到出口,发现一种走法,打擂台 if (x=n)and(y=n) then begin if s<step then step:=s; exit; end; a[x,y]:=1; //向四个方向依次搜索 for i:=1 to 4 do if a[x+dx[i],y+dy[i]]=0 then DFS(x+dx[i],y+dy[i],s+1); a[x,y]:=0; end; begin readln(n); //加墙,防越界 for i:=0 to n+1 do for j:=0 to n+1 do a[i,j]:=1; for i:=1 to n do begin for j:=1 to n do begin read(c); if c='0' then a[i,j]:=0 else a[i,j]:=1; end; readln; end; step:=maxlongint; DFS(1,1,1); writeln(n*n-step); end.

浙公网安备 33010602011771号