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(поскольку односторонний тоже не работает).).

0 ответов

Другие вопросы по тегам