サイズn×nの2次元配列は、番号1から始まるn * nの数値で埋められます。これらの数値は、行ごとに昇順でソートされます。行の最初の数は、前の行の最後の数より大きくなければなりません(すべて(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回のスワップが必要になります。