网格点上放棋子
n*n的网格点上放棋子,要求任何3个棋子不共线,那么最多可以放多少个棋子? 是个不錯的数学问题,也是一个不错的编程题目。线怎么定义的,仅指纵、横和对角线方向的斜线,还是包括所有有理斜率的方向?
如果仅指纵横对角线三向,问题相对简单些,若要包括所有有理方向,预计不会有简明的结果。
这两种题设都可以考虑,分别讨论吧。
还有一种考虑,就是把这个n×n棋盘的对边邻接起来,即拓扑等价于轮胎面。这样一来所有斜率的线都是一样长的,结构反而比平面更单一,也许结果会更规则。
编程高手们,谁抛第一块砖(呵呵,应该是玉,我替人谦虚一哈)? hu版看问题总是比较深刻,
正应了那句俗话:站得高,看得远。 最多肯定不会超过2*n个棋子,因为每一行最多放2个。
问题是2n个棋子能否摆得出来?对于一个具体的n值,只要能举出一个能摆成的例子,就可证明最多是2n。
比如n=2,f(n)=4
n=3,f(n)=6
110
101
011 1表示棋子。
--------------------------------------
对于较小的n值,可以让电脑来暴力求解,但是n大的话,电脑可能吃不消了。
能不能构造出一种满足题目要求的摆法,使得2n个棋子的摆法成为可能,那么就不需要证明了。
或者暴力求解较小的n值,证明2n的答案是错误的。 本帖最后由 medie2005 于 2011-1-14 18:28 编辑
........... 1 1 0 0 0
1 0 1 0 0
0 1 0 1 0
0 0 1 1 0
4或5的一种情形 ,每行每列最多出现两个,1是受限的,而0随着阶数在增多,2n个棋子能摆完吗?呵呵 本帖最后由 056254628 于 2011-1-14 19:19 编辑
楼上是4*5的类型,
对于n*m,最多不会超过2*min(n,m)
楼上刚好放了8个棋子,恰好证明了上限值被取到了。
----------------------------
而实际上楼上的答案不对,斜线上3点共线了,不符合题目要求 7# 056254628
如果斜线也考虑的话,4*5的一个例子
1 0 0 0 1
1 0 1 0 0
0 1 0 0 1
0 1 0 1 0 n=4
--------------
1010
0101
0101
1010 n=5
-----------
01010
11000
00101
10001
00110
页:
[1]
2