首页 > 编程问答 >如何迭代网格?

如何迭代网格?

时间:2024-07-23 06:51:50浏览次数:8  
标签:python datagrid

我正在尝试解决一个编程问题,我有一个管道网格,我必须找出哪些管道从源头正确连接到目的地。我附上了网格的图片。

[管道系统][1]

我想创建网格并对其进行迭代。我使用 pandas 读取文本文件,然后将代表 x 和 y 值的列转换为列表。

pipes = pd.read_csv("D:\pipe.txt", delimiter = ' ', header = None)

char = pipes[0].tolist()

x_val = pipes[1].tolist()

y_val = pipes[2].tolist()

我不知道是否有任何库可以帮助处理这样的网格。 [1]: https://i.sstatic.net/jtPLfHFd.png


当然,我可以帮解决这个问题。想创建一个可以表示管道网络并能够检查哪些管道连接到源和目的地的网格。虽然 Pandas 主要用于数据操作和分析,但可以使用 Python 列表或 NumPy 数组有效地表示网格,然后可以使用算法(例如深度优先搜索或广度优先搜索)遍历该网格。

以下是说明性步骤:

  1. 创建网格表示形式: 可以使用嵌套列表来表示网格,其中每个内部列表代表一行,每个单元格都包含有关管道段的信息(例如,是否连接、管道类型等)。例如:
grid = [
    [1, 1, 0, 1, 1],
    [1, 0, 1, 0, 1],
    [1, 1, 1, 1, 1],
    [0, 1, 0, 1, 0]
]

在这个例子中, 1 代表管道, 0 代表空格。

  1. 遍历网格: 可以使用深度优先搜索 (DFS) 或广度优先搜索 (BFS) 等算法遍历网格并找到从源到目的地的路径。

以下是使用 DFS 的 Python 示例:

def is_valid(grid, x, y):
    # 检查给定的坐标是否在网格边界内
    return 0 <= x < len(grid) and 0 <= y < len(grid[0])

def dfs(grid, x, y, visited, path):
    # 检查当前单元格是否有效且未被访问过
    if not is_valid(grid, x, y) or grid[x][y] == 0 or visited[x][y]:
        return False

    # 将当前单元格标记为已访问
    visited[x][y] = True
    # 将当前单元格添加到路径
    path.append((x, y))

    # 检查是否已到达目的地
    if x == destination_x and y == destination_y:
        return True

    # 探索所有四个方向(上、下、左、右)
    directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
    for dx, dy in directions:
        if dfs(grid, x + dx, y + dy, visited, path):
            return True

    # 如果在任何方向上都找不到路径,则从路径中弹出当前单元格并返回 False
    path.pop()
    return False

# 示例用法:
grid = [
    [1, 1, 0, 1, 1],
    [1, 0, 1, 0, 1],
    [1, 1, 1, 1, 1],
    [0, 1, 0, 1, 0]
]
source_x, source_y = 0, 0
destination_x, destination_y = 3, 4

# 创建一个访问过的单元格矩阵,初始化为 False
visited = [[False for _ in range(len(grid[0]))] for _ in range(len(grid))]

# 创建一个列表来存储路径
path = []

# 从源单元格开始执行 DFS
if dfs(grid, source_x, source_y, visited, path):
    print("找到路径:", path)
else:
    print("未找到路径")

在这个代码中, dfs(grid, x, y, visited, path) 函数递归地探索网格。如果找到一条从源到目的地的路径,它将返回 True 并将路径存储在 path 列表中;否则,它将返回 False

  1. 调整算法: 需要根据管道网络的具体规则和约束调整 DFS 或 BFS 算法。例如,可能需要考虑管道类型、流向或权重。

这就是创建网格表示形式并使用 Python 迭代该网格以找到有效管道路径的一般思路。请记住,需要根据的具体问题和数据集调整代码。

标签:python,datagrid
From: 78780178

相关文章

  • Python 中的 SSL 模块不可用(在 OSX 上)
    我在OSX10.13上的virtualenv中运行时遇到问题。我已经运行了pipinstall并且路径brewinstallopenssl指向/usr/local/include/openssl有谁知道如何解决这一问题?在我重新安装../opt/openssl/include/openssl使用python后,这种......
  • AWS Elastic Beanstalk chown PythonPath 错误
    我正在AWS的elasticbeanstalk上部署一个Web应用程序,遇到了同样的错误:[StageApplication].Stoprunningthecommand.Error:chown/var/app/staging/venv/bin/python:nosuchfileordirectory.我在我的环境配置中看到属性:PYTHONPATH:/var/......
  • Python:支持索引的内存对象数据库?
    我正在做一些数据整理,如果我可以将一堆字典放入内存数据库中,然后对其运行简单的查询,这会简单得多。例如,类似:people=db([{"name":"Joe","age":16},{"name":"Jane","favourite_color":"red"},])over_16=db.filter(age__g......
  • 如何构建一维数组的二维数组的特定 Python 结构?
    如何构建一维数组(即行向量)的二维数组的特定结构以满足特定我正在维护的遗留程序的结构?我可以在此结构中生成正确的内容all_measurements[:12]array([[0.,0.,0.,2.],[0.02,0.334,0.04,2.24],[0.04,0.668,0.08,2.48],...........
  • 如何使用 Python Flask 将新的咖啡馆(元素)添加到数据库(SQLite)?
    这是我的代码:@app.route("/add",methods=["POST"])defpost_new_cafe():new_cafe=Cafe(name=request.form.get("name"),map_url=request.form.get("map_url"),img_url=request.form.get("img......
  • 使用 tkinter 为 python 创建 GUI 时如何解决语法错误?
    我是一名Python初学者,决定使用tkinter制作一个小型GUI,该GUI接受用户(潜在餐馆)的3个输入,然后单击按钮后随机输出其中一家餐馆。我不断收到语法错误,并认为它与我的buttonfunc或调用它的命令有关。此代码尚未包含在GUI上输出餐厅的任何位置。任何帮助将不胜感激#Pyth......
  • 在 python 中打开 gnome 终端立即显示为僵尸
    作为背景,我正在编写一个脚本来训练多个pytorch模型。我有一个训练脚本,我希望能够在gnome终端中作为子进程运行。这样做的主要原因是我可以随时关注训练进度。如果我可能有多个GPU,我想在单独的窗口中多次运行我的训练脚本。为了实现这一点,我一直在使用popen。以下代码用于打......
  • python threading.Condition 的意外行为
    我正在尝试同步多个线程。我期望使用threading.Condition和threading.Barrier时的脚本输出大致相同,但事实并非如此。请解释一下为什么会发生这种情况。一般来说,我需要线程在一个无限循环中执行工作(一些IO操作),但是每个循环都是以主线程的权限开始的,而权限是仅在......
  • Python - 逆透视数据框
    我有一个按日期时间索引的表,每个日期时间都有多个层(中心和交货间隔):日期时间中心交货间隔结算点价格2024-01-0101:00:00休斯顿中心1......
  • 试图理解这个错误:致命的Python错误:PyEval_RestoreThread:该函数必须在持有GIL的情况下
    我有一个小型tkinter应用程序,我一直在其中实现最小的“拖放”,主要作为学习实验。我真正关心的是删除文件的文件路径。一切实际上都工作正常,直到我尝试在拖放后打包标签小部件。下面的最小工作示例。有问题的行会用注释指出。我通常不会在调试方面遇到太多麻烦,但我只是不知......