board=zeros(100,100); ! O1 Y2 x/ X; V% K' l# J3 ^/ o
n=4; 2 F! D& N4 Z4 ?+ y9 t9 A* }
size=2^n;4 ?4 M5 n( c3 X0 c' W( B% |1 m
amount=0; 0 I' [& {3 ^\" L. L
[board,amount]=cover(1,1,2,5,board,size,amount);% i3 t\" g) y& m, F5 U
board(1:size,1:size)\" y' Z8 V) V4 D1 B9 _7 O& q
8 f+ s: v( F$ ] Z8 ~8 r
复制代码
function [board,amount]=cover(i,j,k,l,board,size,amount)%(i,j)为左上角 (k,l)残缺 size为规模 amount为片数 , E\" X- q- s4 m. Y$ Q2 Y
7 d\" F. ]+ l. ~- f2 ^\" I9 u
if size==1 9 ~' R4 b7 x- H$ w: O- l, o
return 6 y2 Z, O5 y- Z2 R. W$ b' S7 d
end) E/ \4 H' [8 i) o/ P% ]5 A7 s( K' [$ e
amount=amount+1;7 w9 r: u) [2 I U* `0 v
size=size/2;8 I1 ?8 |- x @8 J+ S* T
if (k<size+i)&(l<size+j)%残缺位于左上棋盘( q; p+ z# k5 T, d. ?
+ ]* h% k1 n7 d Z r- |6 X! o: c( Z
board(size+i-1,size+j)=amount;board(size+i,size+j)=amount;board(size+i,size+j-1)=amount;%放置 . X2 h6 q& o; Z
[board,amount]=cover(i,j,k,l,board,size,amount);[board,amount]=cover(i,j+size,size+i-1,j+size,board,size,amount);\" m% r4 {1 y; |( ^6 X\" g
[board,amount]=cover(size+i,size+j,size+i,size+j,board,size,amount);[board,amount]=cover(i+size,j,i+size,j+size-1,board,size,amount);0 q5 |4 [( y8 o' M* i9 `\" G