趣题系列:棋盘覆盖问题
2008-07-31 14:48
288 查看
数学中往往有很多这样的例子:一个很复杂的数学难题,确是用一种极为精巧简洁的方式所证明。这些证明往往体现着数学的精妙,十分令人折服。
我们看一个经典的例子: 如下图有一个8*8的棋盘,去掉了2个格子。请问能否用31块1*2的骨牌覆盖整个棋盘。
这个问题相信很多人都知道结果了:肯定是不行的。原因非常清楚:我们已经用红色和白色给整个棋盘染色了。我们只要在棋盘上放一个1*2的骨牌。就必然会是覆盖一红一白两格,偏偏此图红色格子32个,白色格子30个,所以我们无论怎样都不可能覆盖这整个棋盘了。
那么,有人要问了:如果去掉的是1红1白的格子各一个,结果是怎样的呢?你可以自己画几个图试一试。你能证明可以覆盖?还是可以给出反例呢?
据说,这个问题刚出来的时候,通过复杂的理论,终于得到了证明。也就是只要在这个图中去掉一红一白两格,肯定可以被覆盖。
这里,我们将看到一个复杂的问题怎么通过一个简单的方法来证明。我们接下来不但要证明可以覆盖,而且要给出覆盖的方法。看到这里你可能会想到了:构造——对了,只要构造了一组解,原问题便解决了。
我们把原来的棋盘按照下图所示的方法剪开:(沿着黄线和绿线)
我们就把这个棋盘变成了一个环。注意到整个环都是黑白相间的。假设我们从图中去掉一个红色格子,再去掉一个白色格子。我们就得到两条链:每一条链都是红色->白色->红色...->白色。这样我们只要沿着链每次的两个格子放即可(注意到相连的两个格子不存在和骨牌形状不同的情况:1*2,你能找出第二种形状吗?)。把两条链放完,这个棋盘就被覆盖满了,我们的问题也就解决了。
我们看一个经典的例子: 如下图有一个8*8的棋盘,去掉了2个格子。请问能否用31块1*2的骨牌覆盖整个棋盘。
这个问题相信很多人都知道结果了:肯定是不行的。原因非常清楚:我们已经用红色和白色给整个棋盘染色了。我们只要在棋盘上放一个1*2的骨牌。就必然会是覆盖一红一白两格,偏偏此图红色格子32个,白色格子30个,所以我们无论怎样都不可能覆盖这整个棋盘了。
那么,有人要问了:如果去掉的是1红1白的格子各一个,结果是怎样的呢?你可以自己画几个图试一试。你能证明可以覆盖?还是可以给出反例呢?
据说,这个问题刚出来的时候,通过复杂的理论,终于得到了证明。也就是只要在这个图中去掉一红一白两格,肯定可以被覆盖。
这里,我们将看到一个复杂的问题怎么通过一个简单的方法来证明。我们接下来不但要证明可以覆盖,而且要给出覆盖的方法。看到这里你可能会想到了:构造——对了,只要构造了一组解,原问题便解决了。
我们把原来的棋盘按照下图所示的方法剪开:(沿着黄线和绿线)
我们就把这个棋盘变成了一个环。注意到整个环都是黑白相间的。假设我们从图中去掉一个红色格子,再去掉一个白色格子。我们就得到两条链:每一条链都是红色->白色->红色...->白色。这样我们只要沿着链每次的两个格子放即可(注意到相连的两个格子不存在和骨牌形状不同的情况:1*2,你能找出第二种形状吗?)。把两条链放完,这个棋盘就被覆盖满了,我们的问题也就解决了。
相关文章推荐
- 棋盘覆盖问题
- java解决棋盘覆盖问题
- 用Java解决棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘的完美覆盖问题,c++代码实现
- 棋盘覆盖问题
- 【分治法】分治法与二分搜索,棋盘覆盖问题
- 棋盘覆盖问题 分治法
- 03算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- 【分治】问题8.3.1 棋盘覆盖问题
- 经典算法之棋盘覆盖问题 --分治法
- 棋盘覆盖问题
- [递归与分治]棋盘覆盖问题
- 递归问题:Fibonacci序列,分数数列,过河卒,平面分隔问题,棋盘完美覆盖,数字序列
- 分治算法之 棋盘覆盖问题(完整代码实现)
- 高精度计算模板——棋盘覆盖问题
- 高精度计算模板——棋盘覆盖问题
- 实验一 分治与递归―棋盘覆盖问题 java实现