五连珠问题.docx
- 文档编号:30202220
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:19
- 大小:192.64KB
五连珠问题.docx
《五连珠问题.docx》由会员分享,可在线阅读,更多相关《五连珠问题.docx(19页珍藏版)》请在冰豆网上搜索。
五连珠问题
五连珠问题
摘要
五连珠好比我们的五子棋,五子相连为获胜而本文就对五子棋相关的五连珠问题做出一些研究,在棋盘上的每个小方格中都放上棋子,从中取出一些棋子,使得棋盘上剩下的棋子,没有五个在一条直线(横、竖、斜方向)上依次相连,求满足条件的取出最少的棋子数。
对于这道题目而言,三个问题从特殊到一般,从二维平面到三维空间。
对于二维特殊问题的求解,可以根据简单的数学推理与图形演示来表达。
而对于二维平面和三维空间这个一般问题而言,就不能通过简单的图示来表示,只能够通过计算机编程与优化进行讨论,而对于解法,我们则采用回溯法和递归的思想。
针对问题一,在6*7的棋盘上取出一些棋子,我们采用数学推理证明的思想得出答案,通过画图找到一种取出8个棋子满足,之后我们通过在一些规律下的逻辑推理证明7个确实不满足要求,所以8个为最终解。
针对问题二,则是相对问题一的一般情况,将棋盘的大小扩充到m*n的情况,此时利用数学推理证明的思想是行不通的,我们的想法是首先采用0和1的思想,将需要取出的棋子的位置标为0,有棋子的位置标为1。
每一个棋盘的位置点可以用一个二维数组来表示。
通过对题目的数学理解,我们发现此题与“八皇后问题”十分类似,都采用“马走日”的思想。
但对于“五子连珠”问题,每行每列可以有多个“0”元素,显然较为复杂。
但是我们可以将其抽象为“五皇后”问题,然后进行5*5矩阵的叠加与和递归的想法,首先把第一行处理,然后其他行列根据第一行进行排列,最后输出整个矩阵与所求k值。
之后利用这个数学模型求出17*13棋盘的满足条件的k值为44。
针对问题三,是在问题二的二维平面扩充到三维的立体网格m*n*p的棋盘,这个问题和第二问题的想法是相似的,只是将“平面八皇后问题”转化为“空间八皇后问题”。
可以考虑将空间整数点用三维坐标表示后,首先固定其中一个与X轴平行的平面作为初始平面(此平面的选取可以为任意与X轴,Y轴,Z轴垂直的平面),利用问题二中算法定出这个面的棋子摆放位置,然后分别利用其行,列来确定行列所在垂直平面上棋子的摆放位置,此时整个空间的点已经摆放完整,可以利用与最初选定的平面平行的平面进行验证斜线和这些平面上的点是否满足条件。
最后利用计算机模型求出6*7*6的空间网格求出满足题意的最小k值为51。
关键字:
穷举法微元棋盘C语言
摘要
一、问题重述
1.1问题的说明
1.2问题的提出
二、问题分析
2.1问题一分析
2.2问题二分析
2.3问题三分析
3、模型假设
四、符号说明
五、模型的建立与求解
5.1问题一的求解
5.2问题二的模型建立和解决
5.3问题三的模型建立和解决
6、模型评价
6.1模型优点
6.2模型缺点
6.3模型改进
7、参考文献附录
1、问题重述
1.1问题的说明
一个
的空间长方体网格每个小方格的中心点各放一个棋子。
如果两个棋子所在的小方格共边或共顶点,那么称这两个棋子相连。
现从这
个棋子中取出一些,使得棋盘上剩下的棋子,没有五个在一条直线(横、竖、斜方向)上依次相连。
在三维空间中,每个格子是一个1×1×1的小正方体。
在这些格子中同样都填满了棋子,现要从中抽取一部分,使得在每种平面,包括横向所截的
个平面,纵向所截的
个平面,竖直方向所截的
个平面,在每个平面上在横向、纵向、斜方向上都不出现5子连珠。
并且要求在空间斜线上也不出现5子连珠。
1.2问题的提出
1)
棋盘问题
在
的长方形棋盘的每个小方格的中心点各放一个棋子,用数学的方法解决最少取出多少个棋子才能满足要求?
并说明理由。
同时给出一种去掉棋子的方式。
2)二维问题
针对任意规模
的棋盘,要求满足的条件与问题1相同。
问至少去掉多少个棋子,可以使没有五个在一条直线(横、竖、斜方向)上依次相连。
并针对13×17的长方形棋盘,给出具体的求解结果,并将最后结果给出直观的棋盘表格显示。
3)三维问题
在三维空间
的空间长方体网格,问最少去掉多少个棋子可以满足要求。
请建立一般问题的数学模型。
针对
的空间网格用计算机求解,并给出具体的解结果。
2、问题分析
2.1问题一分析
对于
问题,题目要求最少取出多少个棋子才能满足棋盘上剩下的棋子没有五个在一条直线(横、竖、斜方向)上依次相连。
那么如果证明至少需要取出
个棋子。
可采用的一种思路是:
理论上证明取
个棋子不能满足要求,而我确实找到一种取出
个棋子就可以满足要求的取法。
另一种思路是采用一种方法证明至少需要取
个棋子才能满足要求,而我确实找到一种取出
个棋子就可以满足要求的取法。
2.2问题二分析
对问题1中使用数学证明的方法,只能解决规模很小的问题。
而且针对不同的规模,所使用的数学技巧会不同。
这样就不具有一般性。
一个很自然的想法是利用数学建模的方法建立一般模型,然后设计算法或利用软件求解。
2.3问题三分析
题目要求每种平面,包括横向所截的
个平面,纵向所截的
个平面,竖直方向所截的
个平面,在每个平面上在横向、纵向、斜方向上都不出现5子连珠。
并且要求在空间斜线上也不出现5子连珠。
那么可以每个分解,逐层分析。
3、模型假设
(1)假设取走的棋子是随机的;
(2)假设棋盘的大小足够大;
(3)假设棋盘是横置的,且列的宽度始终保持大于行的宽度即(
)
(4)假设三维空间中的棋子是小球形状且与立方体小方格内表面相切。
4、符号说明
问题一,棋盘中用0表示取掉的棋子的位置,空白的位置表示有棋子。
问题二、三,棋盘中用0表示取掉的棋子的位置,1表示有棋子。
5、数学建模的建立与求解
5.1问题一的解决
数学推理证明如下:
棋盘的大小是6*7的,此时利用数学推理证明的思想是行不通的,我们的想法是利用数学建模的方法建立一般,通过对题目的数学理解,通过查阅资料与数学规律的探索中发现,
(1)首先我们通过画图找到了一种k=8的情况是满足题意的,具体如下图:
图1
(2)所以我们只需证明k=7的情况是不满足的。
数学推理证明如下:
棋盘的大小是6*7的,一共有6行7列,所以我们可以看出,要是每一行只能取掉一个棋子时,使其满足每行的任意相邻5个元素不相连的话,那么每行只能在第3,4,5列填0。
如果每行不在第3,4,5列填0时,那么每行必须要调2个0才能满足行的条件成立。
如果7个被取出的棋子不会分布在右下角的阴影部分,同理,由对称性,也不会分布在其他角上的阴影部分。
如下图2所示。
(1)首先,我们找到一种K=8的情况满足题意,具体如下图:
0
0
0
0
0
0
0
0
图1
(2)假设一:
当每行只有一个0时,每行的0必须在第3,4,5列时,此时K=6,而第1.2.6.7列是没有0的,显然是不满足列条成立。
1
2
3
4
5
6
7
0
0
0
0
0
0
1
2
假设二:
当5行满足每行只有一个0(每行的0放在第3.4.5列)其余的一行放2个0(不再3.4.5列)此时K=7;然后我们看这种情况下的列条件是否满足:
当5行的0最多满足第3.4.5列的咧条件,其余一行的2个0最多满足2列的列条件,这样的话,满足的最多的列条件也只能是5列,其余的两列是没有一个0的,是不满足所有的7列的咧条件成立的。
因此K=7不成立。
具体的一种情况如下图:
0
0
0
0
0
0
0
5.2问题二的模型建立与求解
对m×n的五连珠问题,建立一般线性规划模型为:
建0-1决策变量,设
我们的目标书去掉棋子数最少,则有目标函数为:
下面建立约束
每行连续5个格子中至少要去掉一个棋子,则有:
(2-1)
每列连续5个格子中至少要去掉一个棋子,则有:
(2-2)
每条反斜线上连续5个格子中至少要去掉一个棋子,则有:
(2-3)
每条正斜线上连续5个格子中至少要去掉一个棋子,则有:
(2-4)
约束总数:
(2-5)
当
时,
因此总的线性规划模型为:
Lingo程序
!
13*17的五连珠问题;
model:
sets:
Line/1..13/;
Column/1..17/;
Lnum/1..9/;
Cnum/1..13/;
Rnum/1..5/;
assign(Line,column):
x;
endsets
data:
@text()=@writefor(Assign(i,j)|x(i,j)#GT#0:
'x(',i,',',j,')=',x(i,j),'');
enddata
min=@sum(assign(i,j):
x(i,j));
!
单方向改变的约束;
@for(Lnum(i):
@for(column(j):
@sum(Rnum(r):
x(i+r-1,j))>=1));!
i+方向得到的约束;
@for(Line(i):
@for(Cnum(j):
@sum(Rnum(r):
x(i,j+r-1))>=1));!
j+方向得到的约束;
@for(Lnum(i):
@for(Cnum(j):
x(i,j)+x(i+1,j+1)+x(i+2,j+2)+x(i+3,j+3)+x(i+4,j+4)>=1));!
反斜线约束;
@for(Lnum(i):
@for(Cnum(j):
x(i,j+4)+x(i+1,j+3)+x(i+2,j+2)+x(i+3,j+1)+x(i+4,j)>=1));!
正斜线;
@for(assign(i,j):
@bin(x(i,j)));
end
13*17个棋子需要44个棋子
x(1,5)=1x(1,10)=1x(1,15)=1x(2,3)=1x(2,8)=1x(2,13)=1x(3,1)=1x(3,6)=1x(3,11)=1x(3,16)=1x(4,4)=1x(4,9)=1x(4,14)=1x(5,2)=1x(5,7)=1x(5,12)=1x(5,17)=1x(6,5)=1x(6,10)=1x(6,15)=1x(7,3)=1x(7,8)=1x(7,13)=1x(8,1)=1x(8,6)=1x(8,11)=1x(8,16)=1x(9,4)=1x(9,9)=1x(9,14)=1x(10,2)=1x(10,7)=1x(10,12)=1x(10,17)=1x(11,5)=1x(11,10)=1x(11,15)=1x(12,3)=1x(12,8)=1x(12,13)=1x(13,1)=1x(13,6)=1x(13,11)=1x(13,16)=1
具体棋盘图如下:
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
0
1
1
1
1
0
1
1
1
1
0
1
1
1
5.3问题三的模型建立与求解:
对m×n×p的五连珠问题,建立一般线性规划模型为:
建0-1决策变量,设
我们的目标书去掉棋子数最少,则有目标函数为:
三个方向分别称为
轴方向,
轴方向,
轴方向。
下面建立约束
(1)只变一个方向的约束:
沿
方向约束
(3-1)
沿
方向约束
(3-2)
沿
方向约束
(3-3)
(2)变两个方向的约束:
沿
方向约束
(3-4)
沿
方向约束
(3-5)
沿
方向约束
(3-6)
沿
方向约束
(3-7)
沿
方向约束
(3-8)
沿
方向约束
(3-9)
(2)变三个方向的约束:
沿
方向约束
该方向为图2中
方向(1,1,1)
(3-10)
沿
方向约束
该方向为图2中
方向(1,1,-1)
(3-11)
沿
方向约束
该方向为图2中
方向(1,-1,1)
(3-12)
沿
方向约束
该方向为图2中
方向(1,-1,-1)
(3-13)
总共约束有3+6+4=13类。
约束总数:
(3-14)
当
时,
因此总的线性规划模型为:
求解结果。
minZ=64
x(1,1,2)=1x(1,2,5)=1x(1,3,1)=1x(1,3,3)=1x(1,4,1)=1x(1,4,6)=1x(1,5,2)=1x(1,5,4)=1x(1,6,2)=1x(1,7,5)=1x(2,1,1)=1x(2,1,3)=1x(2,1,6)=1x(2,2,4)=1x(2,3,2)=1x(2,4,4)=1x(2,4,5)=1x(2,5,5)=1x(2,6,1)=1x(2,6,3)=1x(2,6,6)=1x(2,7,1)=1x(2,7,5)=1x(3,1,4)=1x(3,2,3)=1x(3,3,3)=1x(3,3,5)=1x(3,3,6)=1x(3,4,1)=1x(3,4,3)=1x(3,4,4)=1x(3,5,2)=1x(3,6,4)=1x(3,7,3)=1x(4,1,2)=1x(4,2,1)=1x(4,2,4)=1x(4,3,1)=1x(4,3,3)=1x(4,3,5)=1x(4,4,3)=1x(4,4,4)=1x(4,5,4)=1x(4,5,6)=1x(4,6,2)=1x(4,7,4)=1x(5,1,5)=1x(5,2,2)=1x(5,2,6)=1x(5,3,4)=1x(5,4,2)=1x(5,5,1)=1x(5,5,3)=1x(5,6,5)=1x(5,7,2)=1x(5,7,6)=1x(6,1,2)=1x(6,2,5)=1x(6,3,3)=1x(6,4,1)=1x(6,4,6)=1x(6,5,4)=1x(6,6,2)=1x(6,7,5)=1
六、模型评价
6.1问题二的评价
此模型的缺点是当m和n值较大时,此时输出的棋盘排列中的数可能会因为超出范围溢出而出现随机数而不是0和1,但是k值是对的。
所以模型还存在一定的问题,需要进一步的优化。
6.2问题三的评价与分析
该模型由于只是根据一个面上规范的0和1的位置进行确定剩余空间上0和1的位置,所以缺乏严格的数学推理和证明,并不能够完全保证代码所输出结果的正确性。
同时对于结果的展示上也缺乏一定的连贯性。
但是该模型是由二维数组的一个推广,所以以后凡是有关于行列不出现相同数字的问题,均可以由此模型进行解决。
七、参考文献
[1]薛申芳,数学建模中的MATLAB程序在C语言下的实现,第21卷第4期,文
章编号:
1672-4658(2006)04-0091-04,2006-05-10
[2]姜启源,叶其孝,数学建模,北京:
机械工业出版社,2009.8。
[3]徐全智,杨晋浩,数学建模,北京:
高等教育出版社,2008;
[4]赵海滨,MATLAB应用大全,北京:
清华大学出版社,2012.5
[5]蔺小林,计算方法,西安电子科技大学出版社,2009
[6]马莉,数学实验与建模,北京:
清华大学出版社,2010.1
[7]司守奎,孙兆亮,数学建模算法与应用北京:
国防工业大学,2015
附录
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 连珠 问题