编程之美:中国象棋将帅问题
来源:互联网 发布:如果个人发现网络运营 编辑:程序博客网 时间:2024/05/01 04:27
题目:下过中国象棋的朋友都知道,双方的"将"和"帅"相隔遥远,并且它们不能照面。在象棋残局中,许多高手能利用这一规则走出精妙的杀招。假设棋盘上中只有"将"和"帅"二子(如图1所示,注:此图仅作示意,原图请见《编程之美:微软技术面试心得》一书)(为了下面叙述方便,我们约定用A表示"将",B表示"帅")。
A、B二子被限制在已方3×3的格子里运动。例如,在如上的表格里,A被正方形{d10,f10,d8,f8}包围,而B被正方形{d3,f3,d1,f1}包围。每一步,A、B分别可以横向或纵向移动一格,但不能沿对角线移动。另外,A不能面对B,也就是说,A和B不能处于同一纵向直线上(比如A在d10的位置,那么B就不能在d1、d2以及d3的位置上)。
请写出一个程序,输出A、B所有合法位置。要求在代码中只能使用一个变量。
文中,作者给出了三种解法,都很巧妙,第一种用到了宏的强大,第二个最为精妙,第三个感觉有点投机,用结构体,那我还能用类啦~!。主要有两点需要注意的地方,一个是如何简单地表示每个格点的位置。在文中,采用了用1~9的数字按照行优先的顺序进行表示(如图2所示),这样,只需要用模余运算就可以得到当前格点列号,从而判断A、B是否互斥。
第一种:
- <<编程之美>>之中国象棋将帅问题
- 编程之美之中国象棋将帅问题
- 编程之美之中国象棋将帅问题
- 编程之美 - 中国象棋将帅问题
- 编程之美 - 读书笔记 - 中国象棋将帅问题
- 编程之美:中国象棋将帅问题
- 微软编程之美--中国象棋将帅问题
- 编程之美-中国象棋将帅问题
- 编程之美_002中国象棋将帅问题
- 编程之美-中国象棋将帅问题
- 编程之美---中国象棋将帅问题
- 编程之美二 : 中国象棋将帅问题
- 编程之美 -- 中国象棋将帅问题
- 编程之美 1.2 中国象棋将帅问题
- 编程之美1.2 中国象棋将帅问题
- 编程之美-中国象棋将帅问题
- 编程之美 1.2 中国象棋将帅问题
- 编程之美:中国象棋将帅问题
- (转)Android display架构分析(三)
- 插入排序--直接插入排序[Java实现]
- 如何生成和运行jar文件
- 第8章 数据处理的两个基本问题 笔记
- extern "C" {}
- 编程之美:中国象棋将帅问题
- SQLite用触发器来替代外键约束
- 转:S3C6410系统控制器
- 编程之美:一摞烙饼的排序
- 转:TQ6410学习笔记
- 停止启用了安全性的WAS Server而不手动输入密码之第二种选择
- 小记心得linux每个目录下kconfig和makefile和内核代码联系
- vim中使程序对其
- 电信的10M带宽的明确意思