首页 > 解决方案 > 使用 .pgm 和 python 为通向目标的图块着色

问题描述

import Labyrinthe laby = Labyrinthe.creer(9,13)

此代码将创建以下列表数组:

[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 2, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 1, 0, 1, 0]
[0, 1, 1, 1, 1, 1, 0, 1, 0]
[0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 0, 0, 0, 0, 0, 1, 0]
[0, 1, 0, 1, 0, 1, 1, 1, 0]
[0, 1, 0, 1, 0, 1, 0, 0, 0]
[0, 1, 0, 1, 0, 1, 1, 1, 0]
[0, 1, 0, 1, 0, 0, 0, 1, 0]
[0, 1, 1, 1, 1, 1, 0, 3, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]

在哪里,

我使用以下代码将像素写入.pgm文件并将它们的颜色设置为 0 到 255 之间的色调,其中 0(100% 白色)是最亮的色调,255 是最暗的(100% 黑色)。

size = 20  #size of a tile in pixels
rows = len(laby)
columns = len(laby[0])
height = size * rows 
width = size * columns

f = open("laby.pgm", "w")
f.write("P2\n" + str(width) + " " + str(height) + "\n255\n") 

for y in range(height):
    for x in range(width):
        indx = x // size
        indy = y // size
        a = laby[indy][indx]
        if a == 0:
            f.write(str(50) + " ")   # colors the pixels
        elif a == 2:
            f.write(str(100) + " ")
        elif a == 3:
            f.write(str(170) + " ")
        else:
            f.write(str(a) + " ")
f.close()

上面的代码将输出如下插入的图像:

用laby.py编写的代码的输出

我需要什么代码来指示计算机为通向目标的图块着色?

标签: pythonpython-3.xlistpgm

解决方案


要找到 A 和 B 之间的路径,您需要一个最短路径算法。他们中的大多数使用图表。

首先,您需要将迷宫转换为图表。这是简单的部分。节点是迷宫中的 1、2 和 3,所有连接在一起的节点之间都有一条边。使用坐标来区分节点。2 是 (1,1),它连接到 1 (1,2),连接到 (1,3),连接到 (1,4) 和 (2,3)...

之后,您可以实现最短路径算法来找到从 A (1,1) 到 B (11,7) 的路径。如果您不熟悉这种算法,则很难做到这一点。最著名的两个是贝尔曼福特和戴克斯特拉。我会让你搜索它们,因为它们都有最好的情况,这取决于图形的大小以及路径是否可以是循环的。

当你有路径时,你可以用另一种颜色为路径的像素着色。


推荐阅读