所以,我有一个使用dict
制作的游戏桌,它看起来像这样:
{(0, 1): '2', (1, 2): '14', (3, 2): '8', (0, 0): '1', (3, 3): '7', (3, 0): '10', (3, 1): '9', (1, 1): '13', (2, 1): '0', (0, 2): '3', (2, 0): '11', (1, 3): '5', (2, 3): '6', (2, 2): '15', (1, 0): '12', (0, 3): '4'}
我创建了另一个名为dict
的{{1}}来存储这些表,使用表本身作为键:
A
哪个A[hash(frozenset(table.tab.items()))] = table
是一个类:
table
我还有另一个名为class tabPlay:
def __init__(self):
self.h = 0
self.g = 0
self.tab = None #I store the dict in here, that's why the table.tab
的结构:
orderedA
用于使用键中的第二项创建orderedA[(hash(frozenset(table.tab.items())),*number*] = tabuleiro
的有序列表,因此我可以使用O(1)获取小数字并将其从{{1}中删除}(和A
以及)访问我想要的A
从orderedA
创建的列表是:
table
这是在orderedA
和def getKey(item):
return (item[0][1])
sortedA = sorted(orderedA.items(), key=getKey)
上每次插入后完成的,因此此列表始终会更新。
创建新A
后,我调用此函数:
orderedA
每当我得到一个table
时,我会将它与我想要的最后阶段进行比较,如果匹配则结束程序,或者在def verify(tJ):
key = hash(frozenset(tJ.tab.items()))
if ((key not in A) and (key not in F)):
A[key] = tJ
orderedA[(key,f(tJ))] = tJ
else:
if (key in A):
if (A[key].g > tJ.g):
A[key] = tJ
orderedA[(key,f(tJ))] = tJ
if (key in F):
if (F[key].g > tJ.g):
A[key] = tJ
orderedA[(key,f(tJ))] = tJ
del F[key]
为空之前继续运行。
我的问题是:运行一段时间后,我收到了一条 KeyError Message ,就像这样:
table.tab
以下是带有错误的行的块:
A
这让我非常讨厌, File "trabs.py", line 164, in minKey
if (A[s[0][0]].h != heuristica):
KeyError: -3852133766700633588
和def minKey(n):
sortedA = deque(n)
element = sortedA.popleft()
print (element)
key = element[0][0]
for s in sortedA:
if (A[s[0][0]].h != heuristica):
break
else:
if (heuristica >= A[s[0][0]].h):
key = s[0][0]
return (key)
while (A):
sortedA = sorted(orderedA.items(), key=getKey)
key = minKey(sortedA)
print ('small key: ', A[key])
element = A[key]
del orderedA[(key,f(A[key]))]
del A[key]
if (element.tab == finalTab):
return True
if (move(element) == False):
continue
F[key] = elemento
return False
总是有相同的元素,这段代码已经适用于一个测试用例(不是一个大的),如前所述,用于获取小项目的A
列表来自orderedA
,那么如何才能在列表中找到它而不是sortedA
?