# encoding=utf-8   ## por causo dos comentários com acentos

def queue(x=[]) : return x      ## definição rápida de uma fila...
def enqueue(q,x): q.insert(0,x)
def dequeue(q)  : return q.pop()


def vaiCavalo(orig,dest):        ## vaiCavalo is © Bacco
   saltos = [(-1,-2),(-2,-1),(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2)]

   visitada = [[False]*8 for i in range(8)]
   ts = queue([orig+(0,)])             ## fila das tentativas=[(x,y,nivel)]
   path={ 0:orig }

   while ts:                           ## enquando há mais tentativas
      nx,ny,lev = dequeue(ts)          ## get proxima tentativa
      path[lev]=(nx,ny)
      if (nx,ny) == dest :
          return ("found",lev,path)
      for dx,dy in saltos:             ## agendar novas tentativas
          x,y = nx+dx, ny+dy
          if 0 <= x < 8 and 0 <= y < 8 and not visitada[x][y]:
              enqueue(ts,(x,y,lev+1))
              visitada[nx][ny] = True

   return "not found"

print("passos feitos:", vaiCavalo((3, 2),(3, 3)))