状態になっているかどうかを確認するO(1)メソッドが必要です。問題は、状態がマップ上のいくつかのズームビニスの位置によって定義されることです。Zoombini = {(1,1):0、(2,2):1、(3,3):3} {位置:Zoombini ID}幅優先探索を使用しており、この位置の辞書をキューにプッシュしています。
dirs = [goNorth, goSouth, goWest, goEast] ## List of functions
zoom = {}
boulders = {}
visited = {} ## {(zoom{}): [{0,1,2},{int}]}
## {Map: [color, distance] 0 = white, 1 = gray, 2 = black
n = len(abyss)
for i in xrange(n):
for j in xrange(n):
if (abyss[i][j] == 'X'):
boulders[(i,j)] = True
elif (isInt(abyss[i][j])):
zoom[(i,j)] = int(abyss[i][j]) ## invariant only 1 zomb can have this position
elif (abyss[i][j] == '*'):
exit = (i, j)
sQueue = Queue.Queue()
zombnum = 0
done = False
distance = 0
sQueue.put(zoom)
while not(sQueue.empty()):
currZomMap = sQueue.get()
for zom in currZomMap.iterkeys(): ## zoom {(i,j): 0}
if not(zom == exit):
z = currZomMap[zom]
for fx in dirs: ## list of functions that returns resulting coordinate of going in some direction
newPos = fx(zom)
newZomMap = currZomMap.copy()
del(newZomMap[zom]) ## Delete the old position
newZomMap[newPos] = z ## Insert new Position
if not(visited.has_key(newZomMap)):
sQueue.put(newZomMap)
私の実装は完了していませんが、すでに州を訪問したかどうかを確認するためのより良い方法が必要です。辞書から整数ハッシュを作成する関数を作成することはできますが、効率的に作成できるとは思いません。時間も問題です。どうすればこれを最適に行うことができますか?