题目描述
给定一个M*M(2≤M≤9)的迷宫,迷宫用0表示通路,1表示围墙。
迷宫的入口和出口分别位于左上角和右上角,入口和出口显然都是0。
在迷宫中移动可以沿着上、下、左、右、左上、右上、左下、右下八个方向进行,前进格子中数字为0时表示可以通过,为1时表示围墙不可通过,需要另外再找找路径。
请统计入口到出口的所有路径(不重复),并输出路径总数。若从入口无法到达出口,请输出0。
输入
第一行输入1个正整数M(≤M≤9),表示迷宫是M行M列。
第2行到第n+1行是一个M阶的0-1方阵。
输出
统计入口到出口的所有路径(不重复),并输出路径总数。若从入口无法到达出口,请输出0。
样例输入 Copy
3
0 0 0
1 0 1
0 0 1
样例输出 Copy
4
和上一题一样,只是多加了几个方向,所以就不一一赘述了
#8联通迷宫
n = int(input())
mp=[]
for i in range(n):
a = list(map(int,input().split()))
mp.append(a)
dir = [(-1,0),(1,0),(0,-1),(0,1),(-1,-1),(1,-1),(-1,1),(1,1)]
c = 0
def dfs(x,y):
global c,mp,dir,n
if x==0 and y==n-1:
c+=1
return
#从当前位置开始向四个方向搜索
for i in range(8):
new_x = x + dir[i][0]
new_y = y + dir[i][1]
if new_x>=0 and new_x<n and new_y>=0 and new_y<n and mp[new_x][new_y]==0:
mp[new_x][new_y]=1
dfs(new_x,new_y)
mp[new_x][new_y]= 0
mp[0][0]=1
dfs(0,0)
print(c)