fork download
  1. # encoding=utf-8 ## por causo dos comentários com acentos
  2.  
  3. def queue(x=[]) : return x ## definição rápida de uma fila...
  4. def enqueue(q,x): q.insert(0,x)
  5. def dequeue(q) : return q.pop()
  6.  
  7.  
  8. def vaiCavalo(orig,dest): ## vaiCavalo is © Bacco
  9. saltos = [(-1,-2),(-2,-1),(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2)]
  10.  
  11. visitada = [[False]*8 for i in range(8)]
  12. ts = queue([orig+(0,)]) ## fila das tentativas=[(x,y,nivel)]
  13. path={ 0:orig }
  14.  
  15. while ts: ## enquando há mais tentativas
  16. nx,ny,lev = dequeue(ts) ## get proxima tentativa
  17. path[lev]=(nx,ny)
  18. if (nx,ny) == dest :
  19. return ("found",lev,path)
  20. for dx,dy in saltos: ## agendar novas tentativas
  21. x,y = nx+dx, ny+dy
  22. if 0 <= x < 8 and 0 <= y < 8 and not visitada[x][y]:
  23. enqueue(ts,(x,y,lev+1))
  24. visitada[nx][ny] = True
  25.  
  26. return "not found"
  27.  
  28. print("passos feitos:", vaiCavalo((3, 2),(3, 3)))
Success #stdin #stdout 0.01s 9992KB
stdin
Standard input is empty
stdout
passos feitos: ('found', 3, {0: (3, 2), 1: (4, 0), 2: (6, 1), 3: (3, 3)})