题解 | #迷宫问题#

迷宫问题

http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

while True:
    try:
        n,m=input().split()
        n=int(n)
        m=int(m)
        map1=[]
        #读取地图
        for i in range(n):
            map1.append([int(j) for j in input().split()])
        #给地图周围绕一圈1(加墙),这样比较好判断边界值和死胡同
        def addone(map1):
            for i in map1:
                i.insert(0,1)
                i.append(1)
            map1.append([1]*len(map1[0]))
            map1.insert(0,[1]*len(map1[0]))
            return map1
        map1=addone(map1)
        path=[(0,0)]
        m=len(map1)-1
        n=len(map1[0])-1
        def jud(x,y,map1):#求x,y点坐标在迷宫里的可能走法,即向上,向下,向左,向右
            #map1为迷宫位置图,path为迷宫的每点从起点到该点走过的所有的点
            #k为本次走过的点
            k=[]
            if x==m-1 and y==n-1: #到达终点的话返回途径所有的点
                return path
            #如果到死胡同,也就是四个方向有三个都是1,则把这个点pop掉并且把这个点也标成1(反正是死胡同了)
            elif (map1[x+1][y]+map1[x-1][y]+map1[x][y+1]+map1[x][y-1]==3 ) and not(x==1 and y==1):
                map1[x][y]=1
                path.pop()
            else: #不是死胡同的话就选一个方向走,这里因为加了个外墙,所以所有值都被我减了1这样返回的结果才是正确的
                if x+1<=m-1 and (x,y-1) not in path and map1[x+1][y]!=1:  #向下
                    k+=[(x,y-1)]
                elif x-1>=0 and (x-2,y-1) not in path and map1[x-1][y]!=1:#向上
                    k+=[(x-2,y-1)]
                elif y+1<=n-1 and (x-1,y) not in path and map1[x][y+1]!=1:#向右
                    k+=[(x-1,y)]
                elif y-1>=0 and (x-1,y-2) not in path and map1[x][y-1]!=1:#向左
                    k+=[(x-1,y-2)]
            #把走过的路径加到path里去
            path.extend(k)
            #从上一步的最后一个点继续往后找,直到找到目标点
            return jud(path[-1][0]+1,path[-1][1]+1,map1)
        #运行一下这个递归
        jud(1,1,map1)
        #把这个以字符串形式打出来,元组的话会报错
        for i in path:
            print('('+ str(i[0])+','+str(i[1])+')')
    except:
        break

写了一天才写出来五五五五,写完发现因为墙对xy进行的减1操作其实可以最后输出的时候再弄,不过这里我就不改了。这个答案可以通过,但只适合只有一条路径的。我应该写的挺清楚的了~有啥不明白的可以问问俺。希望大佬和觉得有帮助的小伙伴给我个赞嘻嘻

全部评论

相关推荐

09-19 13:59
门头沟学院 Java
用微笑面对困难:Trae一下,如果真成了,他用了直接发字节起诉代码版权,,这个代码不商用是没问题的如果没成也是情理之中的。
点赞 评论 收藏
分享
评论
9
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务