建网站网站布局策划案
2026/3/30 3:01:59 网站建设 项目流程
建网站,网站布局策划案,高度重视部门网站建设,WordPress中文king主题在每次填充数字后#xff0c;立即检查是否有位置候选数为空#xff08;无解状态#xff09;。 WITH RECURSIVE initial AS ( SELECT id, puzzle board, -- 初始化行掩码#xff1a;确保 SUM 结果被强制转为 int (SELECT array_agg(m) FROM ( --用2个元素分别保存前…在每次填充数字后立即检查是否有位置候选数为空无解状态。WITHRECURSIVE initialAS(SELECTid,puzzle board,-- 初始化行掩码确保 SUM 结果被强制转为 int(SELECTarray_agg(m)FROM(--用2个元素分别保存前5个低位和后4个高位SELECTSUM(casewhenval0then1::bigint(casewhenr4thenrelser-5end*9val-1)else0end)::bigintasmFROMgenerate_series(0,8)rINNERJOINLATERAL(SELECTsubstring(puzzle,r*9i,1)aschFROMgenerate_series(1,9)i)sONch.CROSSJOINLATERAL(SELECT(ch::text)::intasval)vGROUPBYcasewhenr4then1else2endORDERBYcasewhenr4then1else2end)s)asrows1,-- 初始化列掩码(SELECTarray_agg(m)FROM(SELECTSUM(casewhenval0then1(val-1)else0end)::intasmFROMgenerate_series(1,9)cINNERJOINLATERAL(SELECTsubstring(puzzle,(i-1)*9c,1)aschFROMgenerate_series(1,9)i)sONch.CROSSJOINLATERAL(SELECT(ch::text)::intasval)vGROUPBYcORDERBYc)s)ascols,-- 初始化宫掩码(SELECTarray_agg(m)FROM(SELECTSUM(casewhenval0then1(val-1)else0end)::intasmFROMgenerate_series(0,8)bINNERJOINLATERAL(SELECTsubstring(puzzle,(b/3)*27(b%3)*3((i-1)/3)*9((i-1)%3)1,1)aschFROMgenerate_series(1,9)i)sONch.CROSSJOINLATERAL(SELECT(ch::text)::intasval)vGROUPBYbORDERBYb)s)asboxes,(SELECTarray_agg(pos::int)FROMgenerate_series(1,81)p(pos)WHEREsubstring(puzzle,p.pos,1)0)aspositions,length(replace(replace(puzzle,0,),chr(10),))knownFROM(selectid,replace(replace(puzzle,?,0),chr(10),)puzzlefromsudoku9_9wherelength(replace(replace(puzzle,?,),chr(10),))30)sudoku9_9),solveAS(SELECTid,board::textboard,rows1,cols,boxes,falseassolved,positions,knownFROMinitialUNIONALL(WITHcurrent_levelAS(SELECT*FROMsolveWHERENOTsolved),all_candidatesAS(SELECTid,cl.board,cl.rows1,cl.cols,cl.boxes,pos,positions,known,-- 修正重点每一个数组提取都加 ::int并且用括号包裹位运算((((cl.rows1[(pos-1)/451]9*((pos-1)/9%5)511)::int|cl.cols[(pos-1)%91]::int|cl.boxes[((pos-1)/27*3(pos-1)%9/3)1]::int)# 511 ) 511 )::int as available_maskFROM(select*,unnest(positions)posfromcurrent_level)cl),best_posAS(SELECTDISTINCTON(board)*,-- 计算 1 的数量length(replace((available_mask::bit(9))::text,0,))asc_countFROMall_candidatesORDERBYboard,c_count,bit_count(boxes[((pos-1)/27*3(pos-1)%9/3)1]::int::bit(9))/* case when known40 then pos else -greatest(length(replace(substr(board,1,pos),0,))*100/pos, length(replace(substr(board,pos1),0,))*100/(81-pos1)) end */),next_stepAS(SELECTid,substring(bp.board,1,bp.pos-1)||n.val||substring(bp.board,bp.pos1)asnext_board,casewhenpos45thenarray[bp.rows1[1]|(1::bigint(n.val-1(pos-1)/9%5*9)),bp.rows1[2]]elsearray[bp.rows1[1],bp.rows1[2]|(1::bigint(n.val-1(pos-1)/9%5*9))]endasnext_rows,bp.cols[:c_idx-1]||((bp.cols[c_idx]::int|(1(n.val-1)))::int)::int||bp.cols[c_idx1:]asnext_cols,bp.boxes[:b_idx-1]||((bp.boxes[b_idx]::int|(1(n.val-1)))::int)::int||bp.boxes[b_idx1:]asnext_boxes,array_remove(positions,pos)asrem_pos,known,bp.pos,n.valasfilled_valFROMbest_pos bpCROSSJOINLATERAL(selectvalfromgenerate_series(1,9)n(val)WHEREget_bit(bp.available_mask::int::bit(9),9-n.val)1)nCROSSJOINLATERAL(SELECT((pos-1)/9)1asr_idx,((pos-1)%9)1asc_idx,((pos-1)/27*3(pos-1)%9/3)1asb_idx)idx),-- 矛盾检测检查填充后是否有位置候选数为空conflict_checkAS(SELECTns.id,ns.next_board,ns.next_rows,ns.next_cols,ns.next_boxes,ns.rem_pos,ns.known,-- 检查是否有位置候选数为空矛盾状态EXISTS(SELECT1FROMunnest(ns.rem_pos)asp(pos)CROSSJOINLATERAL(SELECT(((ns.next_rows[(pos-1)/451]9*((pos-1)/9%5)511)::int|ns.next_cols[(pos-1)%91]::int|ns.next_boxes[((pos-1)/27*3(pos-1)%9/3)1]::int)# 511)511asavailable_mask)maskWHEREmask.available_mask0-- 候选数为空矛盾)/*false*/ashas_conflictFROMnext_step ns)SELECTid,next_board,next_rows,next_cols,next_boxes,(position(0INnext_board)0)AND(NOThas_conflict)assolved,-- 已解决且无矛盾rem_pos,known1asknownFROMconflict_checkWHERENOThas_conflict-- 过滤掉有矛盾的状态))SELECTi.id,regexp_replace(i.board,(.{9}),\1||chr(10),g)ASpuzzle,regexp_replace(v.board,(.{9}),\1||chr(10),g)ASresultFROMinitial iLEFTJOIN(SELECTid,boardFROM(SELECTid,board,row_number()OVER(PARTITIONBYidORDERBYknownDESC)asrnFROMsolveWHEREsolved)v0WHERErn1)vONi.idv.id;实测表明提前过滤代价还是比下轮测试大因为要算这么多候选数而下轮实际候选数只选best_pos过滤的比例大约在10%不算太多除非有更好的实现不然没有必要。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询