五连珠问题.docx

上传人:b****1 文档编号:245618 上传时间:2022-10-07 格式:DOCX 页数:18 大小:172.80KB
下载 相关 举报
五连珠问题.docx_第1页
第1页 / 共18页
五连珠问题.docx_第2页
第2页 / 共18页
五连珠问题.docx_第3页
第3页 / 共18页
五连珠问题.docx_第4页
第4页 / 共18页
五连珠问题.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

五连珠问题.docx

《五连珠问题.docx》由会员分享,可在线阅读,更多相关《五连珠问题.docx(18页珍藏版)》请在冰豆网上搜索。

五连珠问题.docx

五连珠问题

摘要

五连珠好比我们的五子棋,五子相连为获胜而本文就对五子棋相关的五连珠问题做出一些研究,在棋盘上的每个小方格中都放上棋子,从中取出一些棋子,使得棋盘上剩下的棋子,没有五个在一条直线(横、竖、斜方向)上依次相连,求满足条件的取出最少的棋子数。

对于这道题目而言,三个问题从特殊到一般,从二维平面到三维空间。

对于二维特殊问题的求解,可以根据简单的数学推理与图形演示来表达。

而对于二维平面和三维空间这个一般问题而言,就不能通过简单的图示来表示,只能够通过计算机编程与优化进行讨论,而对于解法,我们则采用回溯法和递归的思想。

针对问题一,在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问题三分析

三、模型假设

四、符号说明

五、模型的建立与求解

5.1 问题一的求解

5.2问题二的模型建立和解决

5.3问题三的模型建立和解决

六、模型评价

6.1模型优点

6.2模型缺点

6.3模型改进

七、参考文献附录

一、问题重述

1.1问题的说明

一个的空间长方体网格每个小方格的中心点各放一个棋子。

如果两个棋子所在的小方格共边或共顶点,那么称这两个棋子相连。

现从这个棋子中取出一些,使得棋盘上剩下的棋子,没有五个在一条直线(横、竖、斜方向)上依次相连。

在三维空间中,每个格子是一个1×1×1的小正方体。

在这些格子中同样都填满了棋子,现要从中抽取一部分,使得在每种平面,包括横向所截的个平面,纵向所截的个平面,竖直方向所截的个平面,在每个平面上在横向、纵向、斜方向上都不出现5子连珠。

并且要求在空间斜线上也不出现5子连珠。

1.2问题的提出

1)棋盘问题

在的长方形棋盘的每个小方格的中心点各放一个棋子,用数学的方法解决最少取出多少个棋子才能满足要求?

并说明理由。

同时给出一种去掉棋子的方式。

2)二维问题

针对任意规模的棋盘,要求满足的条件与问题1相同。

问至少去掉多少个棋子,可以使没有五个在一条直线(横、竖、斜方向)上依次相连。

并针对13×17的长方形棋盘,给出具体的求解结果,并将最后结果给出直观的棋盘表格显示。

3)三维问题

在三维空间的空间长方体网格,问最少去掉多少个棋子可以满足要求。

请建立一般问题的数学模型。

针对的空间网格用计算机求解,并给出具体的解结果。

二、问题分析

2.1问题一分析

对于问题,题目要求最少取出多少个棋子才能满足棋盘上剩下的棋子没有五个在一条直线(横、竖、斜方向)上依次相连。

那么如果证明至少需要取出个棋子。

可采用的一种思路是:

理论上证明取个棋子不能满足要求,而我确实找到一种取出个棋子就可以满足要求的取法。

另一种思路是采用一种方法证明至少需要取个棋子才能满足要求,而我确实找到一种取出个棋子就可以满足要求的取法。

2.2问题二分析

对问题1中使用数学证明的方法,只能解决规模很小的问题。

而且针对不同的规模,所使用的数学技巧会不同。

这样就不具有一般性。

一个很自然的想法是利用数学建模的方法建立一般模型,然后设计算法或利用软件求解。

2.3问题三分析

题目要求每种平面,包括横向所截的个平面,纵向所截的个平面,竖直方向所截的个平面,在每个平面上在横向、纵向、斜方向上都不出现5子连珠。

并且要求在空间斜线上也不出现5子连珠。

那么可以每个分解,逐层分析。

三、模型假设

(1)假设取走的棋子是随机的;

(2)假设棋盘的大小足够大;

(3)假设棋盘是横置的,且列的宽度始终保持大于行的宽度即()

(4)假设三维空间中的棋子是小球形状且与立方体小方格内表面相切。

四、符号说明

问题一,棋盘中用0表示取掉的棋子的位置,空白的位置表示有棋子。

问题二、三,棋盘中用0表示取掉的棋子的位置,1表示有棋子。

五、数学建模的建立与求解

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

3

4

5

6

假设二:

当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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1