lingzixi 2022-06-30 20:12 采纳率: 78.6%
浏览 172
已结题

python走迷宫深度优先搜索

有哦人知道这个程序要怎么改成打印出来的迷宫路径使用星号表示的吗,就是矩阵里面能显示路径

img


```python
from numpy import *
def findpath(puzzle, start, end):
    # 四个方向
    d = [(-1,0),(0,1),(1,0),(0,-1)]
    vis = [[-1 for _ in range(len(puzzle[0]))] for _ in range(len(puzzle))]
    #迷宫矩阵,0表示路, 1表示墙 
    vis[start[0]][start[1]]=start
    dfs = [start]     
    while dfs:
        x,y = dfs.pop()    #取栈顶及其探查方向
        for i in range(4): #依次检查未探查方向
            m = x+d[i][0]
            n = y+d[i][1]  #算出下一位
            puzzle[start[0]][start[1]] = 6 #把走过的记录为6
            if 0<=m<len(puzzle) and 0<=n<len(puzzle[0]) and puzzle[m][n]==0 and vis[m][n]==-1:   #遇到未探查的新位置 
                dfs.append((x,y))    #原位置和下一方向入栈
                dfs.append((m,n))
                vis[m][n]=(x,y)      #新位置入栈
                puzzle[start[0]][start[1]] = 6 #把走过的记录为6
                if end==(m,n): #到达出口,打印路径
                    return dfs
                break   #退出内层循环,下次迭代将以新栈顶为当前位置继续
    return dfs  #找不到路径
    
puzzle = zeros((10, 10), dtype=float) # 先创建一个全零方阵puzzle;,并且数据的类型设置为float浮点型
f = open('test2.txt') # 打开数据文件文件
lines = f.readlines() # 把全部数据文件读到一个列表lines中
puzzle_row = 0  # 表示矩阵的行,从0行开始
for line in lines: # 把lines中的数据逐行读取出
         list = line.strip('\n').split(' ') # 处理逐行数据:strip表示把头尾的'\n'去掉,split表示以空格来分割行数据,然后把处理后的行数据返回到list列表中
         puzzle[puzzle_row:] = list[0:10] # 把处理后的数据放到方阵A中。list[0:4]表示列表的0,1,2,3列数据放到矩阵A中的A_row行
         puzzle_row += 1 # 然后方阵A的下一行接着读
print(puzzle)        
start = eval(input("请输入起始坐标(x,y):"))
end = eval(input("请输入终点坐标(m,n):"))
res = findpath(puzzle, start, end)
if res:print(res)
else: print('无路可走')


```

  • 写回答

2条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-06-30 21:17
    关注

    额。。。注释得挺好
    把输出结果里的坐标数字替换成星号就好了

    for i, j in res:
        puzzle[i][j] = "*"
    

    如果要保存进txt,还要把之前的迷宫数字都换成字符串,当然,如果你是从txt读取的迷宫矩阵,就没这个问题了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月8日
  • 已采纳回答 6月30日
  • 创建了问题 6月30日

悬赏问题

  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM