以咋样的规律下五子棋,会成为平局

先手按照如图所示的规律下,后手选择在其上下左右任意一边跟着下,直到先手这个形状不能再在棋盘上延伸,不需要填满棋盘就可以平局,因为接下来即使交给任意一方随意下都不可能连成5子了。图中是白先手。以咋样的规律下五子棋,会成为平局

下面是简单的算法表现,程序没跑过,仅供参考。//基本参数var black = false;var white = true;var wid = 13;var len = 13;//定义一枚棋子,包含了其位置(原点为0,0)和颜色。var Point = {\tcreateNew: function(a,b,c){\t\tvar point = {};\t\tpoint.x = a;\t\tpoint.y = b;\t\tpoint.color = c;\t\tpoint.draw = function(){//画棋子的函数};\t}}var target_point = Point.createNew(0,1,white);//按图示假设第一手白棋放在(0,1)。 var targets = new Array();//存储第一排棋子的数组/* * 第一排的规律是,每隔4个空位有一枚棋子,左右都要考虑。 */for(var j = 0;target_point.y - 5j \u0026gt;= 0 || target_point.y + 5j \u0026lt; wid;j++){\tvar drawing_point = Point.createNew(0,0,white);\t\t//初始位置左边\tif(target_point.y - 5j \u0026gt;= 0){\t //画白棋\t\tdrawing_point.y = targetpoint.y - 5j;\t\ttargets.push(drawing_point);\t\tdrawing_point.draw();\t\t\t\t//画黑棋\t\tdrawing_point.y = (drawing_point.y - 1) % wid;\t\tdrawing_point.color = black;\t\tdrawing_point.draw();\t\tdrawing_point.color = white;\t\t\t}\t\t//初始位置右边\tif(target_point.y + 5j \u0026lt; wid){\t\t//画白棋\t\tdrawing_point.y = targetpoint.y + 5j;\t\ttargets.push(drawing_point);\t\tdrawing_point.draw();\t\t\t\t//画黑棋\t\tdrawing_point.y = (drawing_point.y - 1) % wid;\t\tdrawing_point.color = black;\t\tdrawing_point.draw();\t\t\t}}\t/* * 按列铺满整个棋盘,规律是每个上一排的棋下移一排后向左平移两格。注意超过边界的会从另一头出来,所以要做取余数运算。 */for(var i = 0; i \u0026lt; len; i++){\tfor(target in targets){\t\t\t//画白棋\t\ttarget.x++;\t\ttarget.y = (target.y - 2) % wid;\t\ttarget.draw();\t\t\t\t//画黑棋\t\tvar target_black = target;\t\ttarget_black.y = (target_black.y - 1) % wid;\t\ttarget_black.color = black;\t\ttarget_black.draw();\t}}
■网友
好吧~我自问自答了~大神不救我~我就自救吧 实验研究表明,这种无聊的将五子棋摆成平局的方法确有规律~1.情况一以咋样的规律下五子棋,会成为平局

落子列序为:
1,3,2,4
5,7,6,8
9,11,10,12
13
周期:4
2.情况二
以咋样的规律下五子棋,会成为平局

落子列序为:
1,4,2,5,3,6
7,10,8,11,9,12
13
周期:6
3.发现的规律(可能表述的不太清楚)
根据不完全归纳产生的结果,可以粗略推算出如下规律:
1.这种五子棋平局法可以延伸到 N 阶(N为奇数并且不小于5)的情形都适用。
2.周期是 2*I (I=2,3,4)。
3.点击列序方法产生的方法之一:
A:initRow++,initRow+T/2 // intiRow 初始列 每次递增1,T为周期数B:if(initRow%(T/2))==0 {initRow=initRow+T/2+1 }//如果已经产生至少一个周期数的序列,改变 intiRow 的值C:if(initRow==GoBangMultiplicity) {print("最后一个列序号产生")}//GoBangMultiplicity是五子棋棋盘的阶数 依照 B 、C 的约束, 按照 A 的方式依次产生成对列序号 直到产生最后一列的序号。4.使用 JS 实现情况一


推荐阅读