数字华容道算法生有解

数字华容道NxN数字随机排列的阵列有解的充要条件是:

N为奇数,总逆序数为偶数,

N为偶数,总逆序数为奇数。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pif56m66Zyy54-g,size_20,color_FFFFFF,t_70,g_se,x_16watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pif56m66Zyy54-g,size_20,color_FFFFFF,t_70,g_se,x_16watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pif56m66Zyy54-g,size_20,color_FFFFFF,t_70,g_se,x_16

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pif56m66Zyy54-g,size_20,color_FFFFFF,t_70,g_se,x_16 

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pif56m66Zyy54-g,size_20,color_FFFFFF,t_70,g_se,x_16

 

--数字华容道算法2*2-10*10
--随机生成有解算法
--作者,韩永旗
--迷你号247312290

local A={}
local N=0
local t=""
local n=0

local 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)
 end 

local 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  
end

local 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
 end

local 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
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值