python - 使用 .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]
在哪里,
- '0' - 是一堵墙
- '1' - 是路径
- '2' - 起始图块
- '3' - 目标图块
我使用以下代码将像素写入.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()
上面的代码将输出如下插入的图像:
我需要什么代码来指示计算机为通向目标的图块着色?
解决方案
要找到 A 和 B 之间的路径,您需要一个最短路径算法。他们中的大多数使用图表。
首先,您需要将迷宫转换为图表。这是简单的部分。节点是迷宫中的 1、2 和 3,所有连接在一起的节点之间都有一条边。使用坐标来区分节点。2 是 (1,1),它连接到 1 (1,2),连接到 (1,3),连接到 (1,4) 和 (2,3)...
之后,您可以实现最短路径算法来找到从 A (1,1) 到 B (11,7) 的路径。如果您不熟悉这种算法,则很难做到这一点。最著名的两个是贝尔曼福特和戴克斯特拉。我会让你搜索它们,因为它们都有最好的情况,这取决于图形的大小以及路径是否可以是循环的。
当你有路径时,你可以用另一种颜色为路径的像素着色。
推荐阅读
- php - 搜索结果中的“未定义偏移”错误
- sql-server - SQL Server 中列名后的# 是什么意思
- linux - 如何只允许 samba 通过 vpn 隧道?
- string - 可以沿 CAN 总线发送一串消息吗?
- ios - 我们可以在 Xcode 10.1 中使用旧版构建系统来响应原生 ios 吗?
- android - 在 Android Kotlin 聊天应用程序中显示聊天列表时出现数据库异常
- python - Python 3:通过解析 pandas 数据帧来构造变量
- java - Spring Boot 应用程序上下文不起作用
- r - mclapply 因 data.table 失败
- c++ - 在 C++ 中发送类而不是 MPI_Type_create_struct 是否有不同的 MPI 命令?