Python广度优先搜索矩阵打印路径

2023-12-09

我有这行代码,用于测试在由矩阵表示的迷宫中是否可以找到一条路径。在确定是否存在路径后,如何在末尾打印路径。我尝试过做一个堆栈,但我不知道如何继续。

from queue import Queue
maze=open(input())
matrix=maze.readlines()
matrix=[i.strip() for i in matrix]
matrix=[i.split() for i in matrix]
numrows, numcols = len(matrix), len(matrix[0])
q=Queue()
row=0
col=0
q.put((row,col))
while not q.empty():
    row, col = q.get()
    if col+1 < numcols and matrix[row][col+1] == "0":
         q.put((row, col+1))
         matrix[row][col+1] = "2"
    if row+1 < numrows and matrix[row+1][col] == "0":
         q.put((row+1, col))
         matrix[row+1][col] = "3"
    if 0 <= col-1 and matrix[row][col-1] == "0":
         q.put((row, col-1))
         matrix[row][col-1] = "4"
    if 0 <= row-1 and matrix[row-1][col] == "0":
         q.put((row-1, col))
         matrix[row-1][col] = "5" 
row,col=numrows-1,numcols-1
var=matrix[row][col]
if var=="0":
    print ("There is no path.")
else:
    print ("There is a path.")

这是一个示例矩阵:

0 0 0 0 1 0 0 0
0 1 1 0 1 0 1 0
0 1 0 0 1 0 1 0
0 0 0 1 0 0 1 0
0 1 0 1 0 1 1 0
0 0 1 1 0 1 0 0
1 0 0 0 0 1 1 0
0 0 1 1 1 1 0 0

因为你是用BFS来寻找路径,所以最终的逼近不可能是从起点到终点的最短路径,而实际上你只能得到哪一点与起点相连的结果。

因此,要获得精确路径,可以使用 DFS 来查找路径并使用堆栈来保存访问过的点,或者使用 Dijkstra 来查找从起点到终点的最短路径。

这是一个简单的 DFS 函数,它使用递归,路径用字符 2 表示

suc = 0

def dfs(row, col):
    global suc
    if suc == 1:
        return
    matrix[row][col] = "2"

    if (row, col) == (numrows - 1, numcols - 1):
        print("Success")
        suc = 1

    if col + 1 < numcols and matrix[row][col + 1] == "0":
        dfs(row, col + 1)

    if row + 1 < numrows and matrix[row + 1][col] == "0":
        dfs(row + 1, col)

    if 0 <= col - 1 and matrix[row][col - 1] == "0":
        dfs(row, col - 1)

    if 0 <= row - 1 and matrix[row - 1][col] == "0":
        dfs(row - 1, col)


maze = open(input())
matrix = maze.readlines()
matrix = [i.strip() for i in matrix]
matrix = [i.split() for i in matrix]
numrows, numcols = len(matrix), len(matrix[0])

dfs(0, 0)

var = matrix[numrows - 1][numcols - 1]

for m in matrix:
    print(m)

if var == "0":
    print("There is no path.")
else:
    print("There is a path.")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python广度优先搜索矩阵打印路径 的相关文章

  • 使用 selenium 和 python 在网页网格中抓取 javascript 数据

    我的问题是我需要包含网站子域的网格中的所有数据https applipedia paloaltonetworks com https applipedia paloaltonetworks com 包含名称 类别 子类别 风险 技术的数据
  • 查找数据集中的异常值

    我有一个 python 脚本 它创建服务器正常运行时间和性能数据列表的列表 其中每个子列表 或 行 包含特定集群的统计信息 例如 格式良好的它看起来像这样 Cluster Availability Requests Sec Errors S
  • 如何将 typeshed 与 mypy 一起使用?

    我克隆了typeshed https github com python typeshed但我不知道如何告诉 mypy 使用它包含的类型提示 我在 mypy help 中没有看到任何选项 mypy 存储库确实包含对 typeshed 存储库
  • Django表单中的隐藏字段不在cleaned_data中

    我有这个表格 class CollaboratorForm forms Form user forms CharField label Username max length 100 canvas forms IntegerField wi
  • 从 java 代码运行 Python 脚本

    这是我第一次在java中尝试python 我正在尝试从我的代码执行 python 脚本 如下所示 Process process Runtime getRuntime exec python C Users username Desktop
  • 为什么Flask后台线程获取错误的数据库信息?

    为了将实时数据库信息推送到客户端 我在服务器端使用flask socketio 通过使用websocket将所有实时数据库信息推送到客户端 我的视图文件有一个片段 from models import Host from flask soc
  • 使用 Python 访问内存映射文件

    我希望利用激战 2 中的内存映射文件 该文件旨在链接到 Mumble 以获得位置音频 该文件包含有关字符坐标的信息和其他有用的信息 我已经能够使用此脚本访问坐标信息 import mmap import struct last while
  • 如果每个元组中的第二项重复,如何从元组列表中删除元素?

    如果每个元组中的第二项重复 如何从元组列表中删除元素 例如 我有一个按第一个元素排序的列表 如下所示 alist 0 7897897 this is a foo bar sentence 0 653234 this is a foo bar
  • Python Jinja2 调用宏会导致(不需要的)换行符

    我的 JINJA2 模板如下所示 macro print if john name if name John Hi John endif endmacro Hello World print if john Foo print if joh
  • 如何在我的 GUI 上绘图

    我正在设计一个 GUIPyQt当我单击一个按钮来绘制我创建的函数的数据图时 我需要显示一个 matplotlib pylab 窗口 它就像 Matlab 中使用的运行时 每次按下该按钮时 我都想将 matplotlib pylab 窗口保留
  • dask分布式内存错误

    在分布式作业上运行 Dask 时 我在调度程序上遇到以下错误 distributed core ERROR Traceback most recent call last File usr local lib python3 4 dist
  • 使用 SQLAlchemy 查询 Pandas DataFrame 时重命名列

    当您将数据查询到 pandas 数据帧时 有没有办法保留 SqlAlchemy 属性名称 这是我的数据库的简单映射 对于 school 表 我将数据库名称 SchoolDistrict 重命名为较短的 district 我从 DBA 中删除
  • 将 gtk.DrawingArea 保存到文件

    我想使用 PIL 将 gtk DrawingArea 对象内容保存到 jpeg 文件 我特别想添加这个脚本 http pygstdocs berlios de pygst tutorial webcam viewer html制作照片的可能
  • numpy.polyval() 的反函数

    我想知道 np polyval 是否有一个方便的反函数 我在其中给出 y 值并求解 x 我知道我可以做到这一点的一种方法是 import numpy as np Set up the question p np array 1 1 10 y
  • 抓取 Shopee API v4

    我有一个最终项目 其中我想要检索的数据是通过在shopee上抓取数据来获取的 但是当我在隐藏的API上抓取shopee时遇到问题 当我在Insomnia脚本上尝试时 脚本会运行 但是当我尝试时在本地或 google colab 脚本上 这是
  • matplotlib 后端 - 我关心吗?

    gt gt gt import matplotlib gt gt gt print matplotlib rcsetup all backends u GTK u GTKAgg u GTKCairo u MacOSX u Qt4Agg u
  • 如何使用 opencv python 根据检测到的物体的位置生成其热图

    我需要根据对象的位置生成其热图 示例 视频帧中检测到的绿色球 如果它长时间停留在某个位置 那么该位置应该是红色的 并且球在短时间内经过的帧中的位置必须是蓝色的 这样我就需要生成热图 提前致谢 那么你在这里可以做的是 1 首先定义一个热图作为
  • Maya python 连接选择的属性

    我一直在尝试制作一个简单的脚本 它将采用两个视口选择 然后基本上将第二个视口的旋转连接到第一个 我不确定如何正确地从视口选择中为对象创建变量 这是我的尝试 但不起作用 import maya cmds as cmds sel cmds ls
  • print() 函数的有趣/奇怪的机制

    我正在学习Python 我目前正在学习如何定义自己的函数 并且在尝试理解返回值和打印它之间的区别时遇到了一些困难 我读到的关于这个主题的描述对我来说不太清楚 所以我开始自己尝试 我想我现在已经明白了 如果我没记错的话 区别在于你可以传递 a
  • 合并共享属性的节点

    EDITED 我真的需要 Networkx graph 专家的帮助 假设我有以下数据框 我想将这些数据框转换为图表 然后我想根据描述和优先级属性将两个图映射到相应的节点 df1 From description To priority 10

随机推荐

  • 获取 Haskell 数据构造函数的所有字段

    假设我有以下映射我的数据库架构的数据类型 data Object Object classification Text country Text numberOfParts Int Lots of other fields 我想提取数据库中
  • 如何在 PHP 中读取文本文件的最后 5 行?

    我有一个名为file txt这是通过向其添加行来更新的 我正在通过这段代码阅读它 fp fopen file txt r data while feof fp data fgets fp 4096 echo data 并且出现大量的线条 我
  • 在 Vim 中上下移动整行

    In Notepad I can use Ctrl Shift Up Down to move the current line up and down Is there a similar command to this in Vim I
  • 首次启动期间 Cocoa 应用程序设置的最常见场景是什么?

    我正在创建一个应用程序 我希望用户在第一次应用程序启动期间设置一些强制性首选项 实现这一目标最常见的场景是什么 我应该设置一些用户默认值来查看应用程序是否已设置吗 另外 如果我确定该应用程序是第一次启动 我应该如何显示 设置 窗口 如果我从
  • 使用 Spring Boot 和注释配置 ViewResolver 会出现 No mapping found for HTTP request with URI 错误

    我正在尝试使用 gradle spring boot 和 spring mvc 以及最简单的视图解析器和 html 制作 hello world 应用程序 我从thymeleaf 弹簧引导示例我只是想删除 thymeleaf 以使用纯 ht
  • 将二进制字符串转换为 ascii 文本?

    我想知道是否可以输入二进制数字并将它们翻译回文本 例如 我输入 01101000 01100101 01101100 01101100 01101111 它会将其转换为单词 hello 只是一些逻辑更正 这里分三步 将二进制集转换为整数 然
  • 在 NodeJS 中更新多个 MongoDB 文档似乎不起作用

    所以我知道这个问题已经被问过很多次了 但我已经查了 30 多分钟了 老实说我找不到我做错了什么 我想更新我的 mongo 数据 这是两个文档的示例 id ObjectId 561e34c68b7639481c38ce62 id 165799
  • Xamarin Forms Android - 拍照时毫无例外地崩溃

    Xamarin Forms Android 在拍照时崩溃 无一例外 但这种情况发生在大约 65 的尝试中 有时应用程序不会崩溃 我可以正常拍照 在其他手机 同一型号 上 每次我想拍照时应用程序都会崩溃 我在用着https github co
  • React useParams 在进入页面时给出空对象

    我正在做个人React js项目 我有以下问题useParams 单击导航栏后无法显示地图项目 它进入页面 但无法在屏幕上显示 它在屏幕上显示一个空物体 这是ItemContainer我在哪里定义了useParams我认为代码有错误 imp
  • Jqgrid 树视图邻接

    我在 ma 应用程序中使用 Jqgrid 树视图模型 我可以看到它显示错误 因为不支持对象或属性 我已包含 grid Treeview js 和其他 Jqgrid 脚本文件 我不知道可能是什么问题 当我在net中检查邻接树视图的示例应用程序
  • 后期绑定 wdGoToBookmark

    我必须使用后期绑定 我如何替换以下内容 Sub CopyCell wd As Object stringcell As String BookMarkName As String find Word bookmark wd Selectio
  • 使用 iTextsharp 添加 PDF 的页眉和页脚

    如何为pdf中的每一页添加页眉和页脚 标题仅包含文本 页脚将包含 pdf 的文本和分页 第 1 页 共 4 页 这怎么可能 我尝试添加以下行 但标题未显示在 pdf 中 document AddHeader Header Header Te
  • WPF 应用程序不响应 WM_CLOSE

    我正在尝试从 C 应用程序关闭 C NET 4 WPF 应用程序 C 应用程序使用枚举窗口的标准技术 查找与给定进程 ID 相对应的窗口 通过 PostMessage 向窗口发送 WM CLOSE 然后发送 WaitForSingleObj
  • iOS 设备旋转即时捕捉而不是动画

    所以我有一个基于 LandscapeRight LandscapeLeft 的应用程序 问题是我的 iPad 和 iPhone 5s 上的设备旋转会立即旋转 但没有动画 iOS 9 在我的旧设备 iPhone4S iOS 7 上 动画翻转正
  • 无法对 SSH 命令使用通配符

    我必须检查目录中是否存在许多文件 除了文件扩展名之外 它们遵循标准命名约定 因此我想使用通配符 例如 YYYYMM 201403 FILE LIST cat config txt for file in FILE LIST do FILE
  • 如何在 Windows 服务关闭的情况下将其打开。从网络应用程序控制它

    我想在 Windows 服务关闭时将其打开 是否可以使用 C 从 Web 应用程序中通过代码进行制作 我正在使用 asp net mvc 和 c 您正在寻找ServiceController class
  • Apache poi 从文本框中获取表格

    我正在使用 apache poi 作为 docx 文件中的迭代表 一切正常 但如果表在text box 我的代码看不到表格 表 size 0 XWPFDocument doc new XWPFDocument new FileInputSt
  • 使用 JQ 将 JSON blob 转换为 BQ 友好格式

    坦白说 我对 JSON JQ 或 Java 方面的大部分内容几乎没有经验 我花了很多时间尝试使用jq命令行函数可以正确格式化测试数据块 以便我可以轻松地将其输入 Google BigQuery total items 848 page co
  • 混合外观和感觉

    到目前为止我有这个 public static void main String args try UIManager setLookAndFeel com sun java swing plaf nimbus NimbusLookAndF
  • Python广度优先搜索矩阵打印路径

    我有这行代码 用于测试在由矩阵表示的迷宫中是否可以找到一条路径 在确定是否存在路径后 如何在末尾打印路径 我尝试过做一个堆栈 但我不知道如何继续 from queue import Queue maze open input matrix