0
点赞
收藏
分享

微信扫一扫

问题 H: 8连通迷宫(python)

肉肉七七 2022-04-21 阅读 118

题目描述

给定一个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)
举报

相关推荐

0 条评论