n×n×n 立方體(n 奇/偶),數字 0~n³-1,0 為空位。判斷能否通過移動 0 恢復有序狀態。
idx = z*n² + x*n + y。inv。inv 為偶數。(inv + row0) % 2 == 0。ll merge_sort(int l, int r, int *a, int *b) { // 歸併排序計算逆序對
if (l==r) return 0;
int m=(l+r)/2;
ll ret = merge_sort(l,m,a,b) + merge_sort(m+1,r,a,b);
int p=l, q=m+1, mv=l;
while (p<=m || q<=r) {
if (q>r || (p<=m && a[p]
總結
三維八數碼推廣:置換奇偶性不變量決定可解性。奇數階只看逆序對;偶數階需結合空位行號。代碼通過模擬移動空位到終點,統一轉化為奇數階判斷,極其巧妙。歸併排序 O(N log N) 計算逆序對,N ≤ 10⁶ 完全足夠。