Двумерный массив размером n × n заполняется n * n числами, начиная с номера 1. Эти числа должны быть отсортированы по строке в порядке возрастания; первый номер строки должен быть больше последнего номера предыдущей строки (наименьшее число из всех (1) будет в [0,0]). Это похоже на 15 головоломки .
Это, например, отсортированный массив размером n = 3 .
1 2 3
4 5 6
7 8 9
вход
Ввод представляет собой скремблированный массив. Может быть любого размера до n = 10. Пример для n = 3:
4 2 3
1 8 5
7 9 6
Вывод
Вывести список свопов, необходимых для сортировки массива. Своп определяется следующим образом : Два смежных номера меняются местами, либо по горизонтали или по вертикали; замена по диагонали не допускается.
Пример вывода для примера выше:
- Обмен 4 и 1
- Поменяйте местами 8 и 5
- Поменяйте местами 8 и 6
- Обмен 9 и 8
Чем меньше требуется свопов, тем лучше. Время вычислений должно быть возможным.
Вот еще один пример ввода с n = 10:
41 88 35 34 76 44 66 36 58 28
6 71 24 89 1 49 9 14 74 2
80 31 95 62 81 63 5 40 29 39
17 86 47 59 67 18 42 61 53 100
73 30 43 12 99 51 54 68 98 85
13 46 57 96 70 20 82 97 22 8
10 69 50 65 83 32 93 45 78 92
56 16 27 55 84 15 38 19 75 72
33 11 94 48 4 79 87 90 25 37
77 26 3 52 60 64 91 21 23 7
Если я не ошибаюсь, для этого потребуется около 1000-2000 перестановок.