BFS не работает для куба 2x2x2 - Python 3
Я беру курсы MIT (онлайн), и возникла проблема, что нам пришлось использовать BFS для решения куба 2x2x2. Вот мой код:
queue = deque()
queue2 = deque()
queue2.append((a,b,c,d,e,f))
queue.append((A,B,C,D,E,F))
parents = {(A,B,C,D,E,F): (None,'')}
parents_2 = {(a,b,c,d,e,f):(None,'')}
moves=[' Right',' Left',' Up',' Bottom',' Forward',' Back']
while True:
curr_cube = queue.popleft()
curr_cube_2 = queue2.popleft()
for i in range(6):
s = moves[i]
if i == 0:
temp = Right(curr_cube[0],curr_cube[1],curr_cube[2],curr_cube[3],curr_cube[4],curr_cube[5])
temp2 = Right(curr_cube_2[0],curr_cube_2[1],curr_cube_2[2],curr_cube_2[3],curr_cube_2[4],curr_cube_2[5])
if i == 1:
temp = Left(curr_cube[0],curr_cube[1],curr_cube[2],curr_cube[3],curr_cube[4],curr_cube[5])
temp2 = Left(curr_cube_2[0],curr_cube_2[1],curr_cube_2[2],curr_cube_2[3],curr_cube_2[4],curr_cube_2[5])
if i == 2:
temp2 = Up(curr_cube_2[0],curr_cube_2[1],curr_cube_2[2],curr_cube_2[3],curr_cube_2[4],curr_cube_2[5])
temp = Up(curr_cube[0],curr_cube[1],curr_cube[2],curr_cube[3],curr_cube[4],curr_cube[5])
if i == 3:
temp2 = Bottom(curr_cube_2[0],curr_cube_2[1],curr_cube_2[2],curr_cube_2[3],curr_cube_2[4],curr_cube_2[5])
temp = Bottom(curr_cube[0],curr_cube[1],curr_cube[2],curr_cube[3],curr_cube[4],curr_cube[5])
if i == 4:
temp2 = Forward(curr_cube_2[0],curr_cube_2[1],curr_cube_2[2],curr_cube_2[3],curr_cube_2[4],curr_cube_2[5])
temp = Forward(curr_cube[0],curr_cube[1],curr_cube[2],curr_cube[3],curr_cube[4],curr_cube[5])
if i == 5:
temp2 = Back(curr_cube_2[0],curr_cube_2[1],curr_cube_2[2],curr_cube_2[3],curr_cube_2[4],curr_cube_2[5])
temp = Back(curr_cube[0],curr_cube[1],curr_cube[2],curr_cube[3],curr_cube[4],curr_cube[5])
if temp in parents or temp2 in parents_2:
continue
parents[temp] = (curr_cube,parents[curr_cube][1]+s)
parents_2[temp2] = (curr_cube_2,parents_2[curr_cube_2][1]+s)
if isSolved(temp[0],temp[1],temp[2],temp[3],temp[4],temp[5]) or temp == temp2 or temp2 == (A,B,C,D,E,F):
print("Parents:")
print (parents)
print("Parents 2:")
print(parents_2)
sys.exit(0)
queue.append(temp)
queue2.append(temp2)
Поскольку весь код был слишком длинным, это только основная часть.A,B,C,D,E и F представляют собой скремблированную версию, где каждый является гранью скремблированного куба, а a, b, c, d, e. и f - то же самое, но для нешифрованной версии. Правое вращение вправо, левое вращение влево и то же самое для остальных, и приведенные аргументы являются гранями куба. Но этот код не работает. Почему?(ПРИМЕЧАНИЕ. Сначала я использовал односторонний BSF, но подумал, что может быть лучше сделать его двусторонним BFS(поскольку односторонний тоже не работает).).