fork download
  1. def swap(G, i, j, dir):
  2. di, dj = {"up": (-1, 0), "down": (1, 0), "left": (0, -1), "right": (0, 1)}[dir]
  3. ii, jj = (i + di) % len(G), (j + dj) % len(G[i])
  4. G[i][j], G[ii][jj] = G[ii][jj], G[i][j]
  5.  
  6. def _sort(G, vis, i, j):
  7. vis[i][j] = True
  8. curr = G[i][j]
  9. for dir in ("up", "down", "left", "right"):
  10. di, dj = {"up": (-1, 0), "down": (1, 0), "left": (0, -1), "right": (0, 1)}[dir]
  11. ii, jj = (i + di) % len(G), (j + dj) % len(G[i])
  12. if not vis[ii][jj]:
  13. adj = G[ii][jj]
  14. if curr > adj:
  15. swap(G, i, j, dir)
  16. _sort(G, vis, ii, jj)
  17.  
  18.  
  19. def get_sorted(G):
  20. n, m = len(G), len(G[0])
  21. vis = [[False for _ in range(m)] for _ in range(n)]
  22. for i in range(n):
  23. for j in range(m):
  24. if not vis[i][j]:
  25. _sort(G, vis, i, j)
  26.  
  27.  
  28.  
  29. G = [[4, 5, 2, 2], [1, 3, 6, 4]]
  30. get_sorted(G)
  31. print(G)
  32.  
Success #stdin #stdout 0.04s 9548KB
stdin
Standard input is empty
stdout
[[2, 2, 5, 1], [3, 4, 4, 6]]