数学建模社区-数学中国
标题:
200908网友求助《棋盘覆盖问题》
[打印本页]
作者:
xinzhiyong
时间:
2009-8-9 16:42
标题:
200908网友求助《棋盘覆盖问题》
本帖最后由 为你奋斗 于 2009-12-3 16:03 编辑
在一个
2k
×
2k
个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的
4
种不同形态的
L
型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何
2
个
L
型骨牌不得重叠覆盖
这是编写的程序
%
残缺棋盘
board=zeros(100,100);
n=4;
size=2^n;
amount=0;
[board,amount]=cover(1,1,2,5,board,size,amount);
board(1:size,1:size)
function [board,amount]=cover(i,j,k,l,board,size,amount)%(i,j)
为左上角
(k,l)
残缺
size
为规模
amount
为片数
if size==1
return
end
amount=amount+1;
size=size/2;
if (k<size+i)&(l<size+j)%
残缺位于左上棋盘
board(size+i-1,size+j)=amount;board(size+i,size+j)=amount;board(size+i,size+j-1)=amount;%
放置
[board,amount]=cover(i,j,k,l,board,size,amount);[board,amount]=cover(i,j+size,size+i-1,j+size,board,size,amount);
[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);
elseif (k>=size+i)&(l<size+j)%
残缺位于左下棋盘
board(size+i-1,size+j)=amount;board(size+i,size+j)=amount;board(size+i-1,size+j-1)=amount;%
放置
[board,amount]=cover(i+size,j,k,l,board,size,amount);[board,amount]=cover(i,j+size,size+i-1,j+size,board,size,amount);
[board,amount]=cover(size+i,size+j,size+i,size+j,board,size,amount);[board,amount]=cover(i,j,i+size-1,j+size-1,board,size,amount);
elseif (k<size+i)&(l>=size+j)%
残缺位于右上棋盘
board(size+i,size+j-1)=amount;board(size+i,size+j)=amount;board(size+i-1,size+j-1)=amount;%
放置
[board,amount]=cover(i,j+size,k,l,board,size,amount);[board,amount]=cover(i,j,i+size-1,j+size-1,board,size,amount);
[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);
elseif (k>=size+i)&(l>=size+j)%
残缺位于右下棋盘
board(size+i,size+j-1)=amount;board(size+i-1,size+j)=amount;board(size+i-1,size+j-1)=amount;%
放置
[board,amount]=cover(size+i,size+j,k,l,board,size,amount);[board,amount]=cover(i,j+size,size+i-1,j+size,board,size,amount);
[board,amount]=cover(i,j,i+size-1,j+size-1,board,size,amount);[board,amount]=cover(i+size,j,i+size,j+size-1,board,size,amount);
end
end
ns =
请问一下这个结果是什么意思呢?
Columns 1 through 13
11
11
10
10
4
4
5
5
42
42
41
41
33
11
8
8
10
0
4
3
5
42
39
39
41
33
12
8
9
9
7
3
3
6
43
39
40
40
30
12
12
9
2
7
7
6
6
43
43
40
23
23
20
20
19
2
2
14
15
15
28
28
26
26
23
20
18
19
19
14
14
13
15
28
24
24
26
35
22
18
18
21
17
13
13
16
25
25
24
27
38
22
22
21
21
17
17
16
16
1
25
27
27
38
74
74
73
73
68
68
67
1
1
46
47
47
54
74
71
71
73
68
66
67
67
46
46
45
47
54
75
71
72
72
70
66
66
69
49
45
45
48
51
75
75
72
65
70
70
69
69
49
49
48
48
44
83
83
82
65
65
77
78
78
62
62
61
44
44
83
81
82
82
77
77
76
78
62
60
61
61
56
85
81
81
84
80
76
76
79
64
60
60
63
59
85
85
84
84
80
80
79
79
64
64
63
63
59
Columns 14 through 16
33
31
31
29
29
31
30
29
32
30
32
32
35
36
36
35
34
36
34
34
37
38
37
37
54
52
52
50
50
52
51
50
53
51
53
53
56
57
57
56
55
57
55
55
58
59
58
58
作者:
zhenenwang
时间:
2012-8-24 22:10
顶顶顶顶顶顶顶
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5