我的BFS迷宫在它自己的类中正确工作,通过使用一个邻居解决迷宫,并使用BFS评估邻居。我有提供给我的测试用例,我不能更改,但是我的测试没有通过所有的样本测试,我不明白。你知道吗
最初,我认为我的问题是网格组件之间的转换,比如(1,0)
或(0,1)
的方向到str
的方向,比如N
的北方方向,因为测试只检查正确的str
方向,而不是网格。我花了很长时间测试翻译(在这里与某人合作),但现在我确定问题出在其他地方,但我不知道在哪里。你知道吗
这是我的BFS迷宫解算器:
def moves(self):
moves = list()
dir_to_str = {
(-1, 0): 'W',
(1, 0): 'E',
(0, -1): 'S',
(0, 1): 'N',
}
(r, c) = self.location
for (dr, dc) in [(-1, 0), (1, 0), (0, -1), (0, 1)]: # up, down, left, right
if self.grid[r + dr][c + dc] != 'X':
moves.append(dir_to_str[(dr, dc)])
return moves
它将打印代理,因为它横穿迷宫使用BFS成功。你知道吗
问题是当我将它导入到BFS测试用例时(我不能更改)。没有一个测试通过。每个人都有一个我不明白的错误,下面是失败的例子:
Ran 3 tests in 0.044s
FAILED (failures=3)
['S',
'S',
'E',
'E',
'E',
'E',
'E',
'E',
'S',
'S',
'E',
'E',
'E',
'E',
'E',
'S',
'S',
'S',
'E',
'E',
'S',
'E',
'E',
'S',
'S',
'S',
'S',
'S',
'E',
'E',
'S',
'S',
'S',
'S',
'S'] != ['E',
'E',
'N',
'N',
'E',
'E',
'N',
'N',
'E',
'E',
'N',
'N',
'N',
'E',
'N',
'N',
'N',
'N',
'N',
'N',
'E',
'N',
'N',
'E',
'E',
'E',
'E',
'E',
'N',
'N',
'E',
'E',
'E',
'E',
'E']
在使用网格时,混淆行和列是一个常见的错误。数据结构
dir_to_str
与代码的其余部分不匹配,因为它使用第一个元组元素作为列(水平/x轴)。你知道吗更改:
至
结果
path
变成:[“S”,“S”,“E”,“E”,“S”,“S”,“E”,“E”,“S”,“S”,“E”,“E”,“E”,“E”,“E”,“E”,“E”,“E”,“E”,“E”,“E”,“S”,“S”,“S”,“S”,“S”,“E”,“E”,“E”,“S”,“S”,“S”,“S”,“S”]
这仍然与输出不匹配,因为您的代码采用的路径与测试套件稍有不同。你知道吗
您可以通过更改搜索的优先级来解决此问题:
变成
然后你得到
['S'、'S'、'E'、'E'、'E'、'E'、'E'、'S'、'S'、'E'、'E'、'E'、'E'、'S'、'S'、'E'、'E'、'E'、'E'、'S'、'S'、'E'、'E'、'E'、'E'、'E'、'S'、'S'、'S'、'S'、'S'、
在所有这些之后,我建议进行重构,以删除散落在代码中的hard-coded literals。通过将定向逻辑集中到整个类的一个数据结构中,可以更容易地避免和查找此类错误。你知道吗
相关问题 更多 >
编程相关推荐