编程之美:中国象棋将帅问题题目:下过中国象棋的朋友都知道,双方的“将”和“帅”相隔遥远,并且它们不能照面。在象棋残局中,许多高手能利用这一规则走出精妙的杀招。假设棋盘上只有“将”和“帅”二子(如图1-3所示)(为了下面叙述方便,我们约定用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所有合法位置。要求在代码中只能使用一个变量。
书上给了三个算法({zh1}一个个人觉得,严格上不符合要求)。感觉还是相对复杂。我自己琢磨了下,给出下面的解法,只有一个循环。算法基于位置的特殊关系: 下图表示A(红色)、B(蓝色)所在位置: |