数字华容道NxN数字随机排列的阵列有解的充要条件是:
N为奇数,总逆序数为偶数,
N为偶数,总逆序数为奇数。
--数字华容道算法2*2-10*10
--随机生成有解算法
--作者,韩永旗
--迷你号247312290local A={}
local N=0
local t=""
local n=0local function addt()
print(unpack(A))
local t=N.."*"..N.."数字华容道随机面板[有解]\n"
for k,v in ipairs(A)
if k%N==0 then t=t..v.." \n"
else
t=t..v.." "
end
end
t=t.."-----------------------------------------------------\n"
print(t)
endlocal function add2()
local n=0
for k,v in ipairs(A)
for i=1,k do
if v<A[i] then n=n+1 end
end
end
return (N*(N+1)+n-1)%2
endlocal function add1()
local n = #A
for i = 1, n do
local j = math.random(i, n)
if j > i then
A[i],A[j] = A[j],A[i]
end
end
if add2()~=1 then add1() end
endlocal function add()
A={} for i=1,N*N-1 do A[i]=i end add1() A[#A+1]=0 addt()
end
for j=2,10 do N=j add() end