Advertisement
Guest User

Untitled

a guest
May 25th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.77 KB | None | 0 0
  1. import itertools
  2. deltas = [(x*a,y*b) for x,y in itertools.permutations((1,2)) for a,b in itertools.product((-1,1),repeat=2)]
  3. valid = {(i,j) for i in range(8) for j in range(8)}
  4. def knight(curpos=(0,0), seen=None):
  5. if seen is None: seen = {curpos}
  6. if len(seen) == len(valid):
  7. yield (curpos,)
  8. return
  9. x,y = curpos
  10. for dx, dy in deltas:
  11. candidate_pos = x+dx, y+dy
  12. if candidate_pos in valid and candidate_pos not in seen:
  13. seen.add(candidate_pos)
  14. for result in knight(candidate_pos, seen):
  15. seen.remove(candidate_pos)
  16. yield (curpos,) + result
  17. seen.add(candidate_pos)
  18. seen.remove(candidate_pos)
  19.  
  20. for solution in knight():
  21. print(solution)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement