思路:首先思路是BFS,要把结果都放到第一个柱子上,所以后面3个的状态顺序无所谓,可以可以快6倍
from collections import deque
def serialize(a):
# return tuple(sorted([tuple(t) for t in a]))
l=[tuple(t) for t in a]
l[1:]=sorted(l[1:])
return tuple(l)
def deserialize(a):
return deque([deque(t) for t in a])
def copy(a):
return deque([deque(t) for t in a])
def helper(n,aa):
a=[deque() for _ in range(4)]
for i,v in enumerate(aa): a[v-1].append(i+1)
step=1
q,qq=[a],[]
vis=set()
vis.add(serialize(a))
target=serialize([deque(range(1,n+1)),deque(),deque(),deque()])
while q:
while q:
a=q.pop()
for i in range(4):
for j in range(4):
if a[i] and (not a[j] or a[i][0]<a[j][0]):
# a2=deserialize(a)
a2=copy(a)
a2[j].appendleft(a2[i].popleft())
a3=serialize(a2)
if a3==target: return step
if a3 in vis: continue
vis.add(a3)
qq.append(a2)
q,qq=qq,q
step+=1
if __name__ == '__main__':
N = int(input())
a = list(map(int, input().rstrip().split()))
print(helper(N,a))