一个N*M的棋盘,右下方有一个棋子,两人轮流走,可以走到上下左右相邻的未走过的格子,不能走则输,谁胜?
来源:互联网 发布:类似知否的高质量 编辑:程序博客网 时间:2024/06/08 06:00
一个N*M的棋盘,右下方有一个棋子,两人轮流走,可以走到上下左右相邻的未走过的格子,不能走则输,谁胜?
证明:
棋盘格子为奇数则后手胜(1*1 后手直接胜)
棋盘格子为偶数则先手胜(1*2 先手走一步就胜)
------------------------------------
这是棋盘对弈的问题,可使用配对解法
N*M定义为N行M列若棋盘格子为奇数,则N和M均为奇数.设为N*M=2k+1
右下方的棋子已占一个格,还剩下2k个格子.其中最下面一行有M-1个格子,为偶数,剩下N-1行,为偶数
因此,可以把剩下的2k个格子两两配对分成k个1×2的小矩形
这时,先手总是领先进入某一个1×2小矩形的第一个格,后手总可以随之进入这个小矩形的第二个格.最后必然先手先无法移动这个棋子,先手输.后手必取胜
若棋盘格子为偶数,设为N*M=2k
将这2k个格子两两配对分成k个1×2的小矩形
右下方的棋子必在某个1×2的小矩形的一个格子中.先手将棋子走入这个1×2的小矩形的另一个格子中.这时还有k-1个1×2的小矩形,每个小矩形中都有两个小方格.这时该后手走,后手总是领先进入剩下的某个1×2小矩形的第一个格,先手就可以随之进入这个小矩形的第二个格.最后必然后手先无法移动这个棋子,后手输.先手必取胜
所以
棋盘格子为奇数则后手胜
棋盘格子为偶数则先手胜
=================
注:将棋盘格子两两配对成为若干个1×2的小矩形是解决本题的关键!
有什么不懂的再Hi我吧
http://www.zybang.com/question/48337795a9f64be625007873c3774cb1.html
1 0
- 一个N*M的棋盘,右下方有一个棋子,两人轮流走,可以走到上下左右相邻的未走过的格子,不能走则输,谁胜?
- 给定一个M*N的格子或棋盘,从左下角走到右上角的走法总数(每次只能向右或向上移动一个方格边长的距离)
- 一个M * N的方格,从左下角走到右上角有多少种走法?
- 输入一个数组(M,N),只可以想右边下边走,从(1,1)到(M,N)经过的最大数字和
- 有一个n*m的格子,求起点到终点的最小字典序
- 【atcoder 10】【博弈论+树形dp】【对一棵树每次从棋子所在节点移走一个石头,将棋子移到与当前节点相邻的节点】
- 棋盘中走n步的所有可能走法
- 201301 JAVA 题目2-3级(0,0)-->(m,n)的棋盘走法
- 走格子/走棋盘问题
- 走格子/棋盘问题 有多少条路径可走
- 求在一个格子里出现n棋子的最少操作数
- 算法--美团--给出m*n个格子,每次只能右走一步或下走一步,打印出所有的路径
- 一个走迷宫的程序
- 走棋盘相关的一系列问题
- 多态实现棋子的走法
- 每次走1到2步,有多少种方法可以到达长度为N的终点:
- CF507C 给定一种二叉树的走法,问到第n个叶子结点之前,有多少个结点被走过
- 一个人走一个n阶的楼梯,他一步可以走1阶,2阶,3阶,这三种情况,问走完这n阶的楼梯共有多少种不同的走法?
- 下列关于文件索引结构的叙述中,哪些是正确的?
- Android之Activity生命周期浅析(一)
- 使用Eclipse这些快捷键,效率提升一倍
- iOS常用三方库集合(三方库、插件、博客等等)
- 新手学Linux(五)----Linux下安装Redis
- 一个N*M的棋盘,右下方有一个棋子,两人轮流走,可以走到上下左右相邻的未走过的格子,不能走则输,谁胜?
- Spark 2.0介绍:从RDD API迁移到DataSet API
- 盒子3D模型
- Chrome使用技巧(几个月的心得)
- Android之Activity生命周期的浅析(二)
- glibc fread函数源码剖析
- ODBG_Pluginshortcut
- java-并发-线程安全
- Java软件工程师的基础知识点