fork(2) download
  1. def SJTperms(a, dirs):
  2. n = len(a)
  3. id = -1
  4. for i in range(n):
  5. # can check mobility mobile largest mobile
  6. if (0<=i+dirs[i]<n) and (a[i] > a[i+dirs[i]]) and ((id == -1) or (a[i] > a[id])):
  7. id = i
  8.  
  9. if (id == -1): #last permutation
  10. return False
  11.  
  12. for i in range(n):
  13. if a[i] > a[id]:
  14. dirs[i] = - dirs[i]
  15.  
  16. #swap elements AND their directions
  17. a[id], a[id + dirs[id]] = a[id + dirs[id]], a[id]
  18. t = dirs[id]
  19. dirs[id], dirs[id + t] = dirs[id + t], dirs[id]
  20. return True
  21.  
  22. a = [1,2,3,4]
  23. d = [-1]*len(a)
  24. cont = True
  25. while cont:
  26. print(a)
  27. #print(d)
  28. cont = SJTperms(a, d)
Success #stdin #stdout 0.02s 9036KB
stdin
Standard input is empty
stdout
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 4, 2, 3]
[4, 1, 2, 3]
[4, 1, 3, 2]
[1, 4, 3, 2]
[1, 3, 4, 2]
[1, 3, 2, 4]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
[4, 3, 1, 2]
[4, 3, 2, 1]
[3, 4, 2, 1]
[3, 2, 4, 1]
[3, 2, 1, 4]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 3, 1]
[4, 2, 3, 1]
[4, 2, 1, 3]
[2, 4, 1, 3]
[2, 1, 4, 3]
[2, 1, 3, 4]