- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,请原谅这个糟糕的标题,但我不知道如何用一句话来描述它......
给定一个包含 3 种字段、空白字段、墙壁和导出的网格,我编写了一个程序来检查每个空白字段,判断该字段是否“安全”。一个人穿过那个网格,但只能非对角线行走,不能穿过墙壁。这个人从一个领域开始,随机选择一个方向并开始朝那个方向走。一旦撞到墙上,它会再次随机选择一个方向,开始向那个方向移动,依此类推。如果一个人按照上述方式穿过网格,从该区域开始,保证在某个点找到导出,则该区域被认为是安全的。
我写了一个Python程序来解决这个问题。它为它检查的每个字段构建一个“树”,包含来自该字段的每条可能路径。我有一个函数,它只返回给定节点的“父节点”,方法是将当前节点的父节点递归添加到节点列表中,直到它到达最顶层节点。
当仅检查一个字段时,程序按预期工作,例如 (1, 4)。但是,它在检查示例网格的所有字段时不起作用。
我已经研究过它并意识到返回给定节点的所有父节点的 alle_parents() 函数在检查所有节点时会产生意想不到的结果。例如。检查字段 (1, 4) 时,该节点的一个子节点是 (1, 8)。 (1, 8) 的 parent 应该只是 (1, 4)。但事实并非如此。 alle_parents((1, 8)) 返回许多不应该存在的不同字段。但是我无法弄清楚为什么它的行为如此。我唯一的猜测是它与“遗留”数据/GC 未按预期工作有关。
相关代码:
class Knoten():
def __init__(self, x, y, parent = None):
self.x = x
self.y = y
self.parent = parent
self.children = []
n = len(spielfeld)
m = len(spielfeld[0])
for k in range(n):
for j in range(m):
if spielfeld[k][j] not in [None, '#', 'E']:
baum = []
i = 0
ebene = []
ebene.append(Knoten(k, j))
baum.append(ebene)
i += 1
while i <= 100:
ebene = []
for knoten in baum[i - 1]:
children = []
if spielfeld[knoten.x][knoten.y] == 'E':
continue
for feld in next_feld(knoten.x, knoten.y):
knoten_neu = Knoten(feld[0], feld[1], knoten)
hinzufuegen = True
for parent in alle_parents(knoten_neu):
if knoten_neu.x == parent.x and knoten_neu.y == parent.y:
hinzufuegen = False
if hinzufuegen:
ebene.append(knoten_neu)
children.append(knoten_neu)
knoten.children = children
if children == []:
if spielfeld[knoten.x][knoten.y] != 'E':
spielfeld[k][j] = '%' # Field not safe
baum.append(ebene)
i += 1
def alle_parents(knoten, parents = []):
if knoten.parent == None:
return parents
else:
parents.append(knoten.parent)
return alle_parents(knoten.parent, parents)
我正在使用的示例 map :
############
# # # #
# ## #
# # E# #
# ## #
# #
# #E E###
############
完整代码(部分代码是德文的,抱歉):http://pastebin.com/3XUBbpkK
最佳答案
我怀疑您的问题是一个常见的 Python 陷阱。这一行:
def alle_parents(knoten, parents = []):
在加载模块时创建一个空数组,而不是每次调用该函数时。 future 对 alle_parents() 的调用将重用相同的数组(其大小可能已经增加)而不是新的空数组!一个很好的修复方法是这样做:
def alle_parents(knoten, parents = None):
parents = parents or []
关于python - 寻路代码产生意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34815882/
我正在尝试提供即时转码的视频。不幸的是,这意味着寻求不起作用。我假设这是因为浏览器不知道视频有多长,因此无法正确显示搜索栏。 有谁知道是否可以对视频的时长进行硬编码? 我想到的另一个选择可能是创建我自
我是一名优秀的程序员,十分优秀!