我正在阅读名为“The Way of Z: Practical Programming with Formal Methods by Jonathan Jacky”的书,在第 18 章(8 Queen 问题)中,作者为著名的 8 Queen 问题提供了基于 Z 符号的正式解决方案。他试图通过将它连接到一个直线方程来求解对角线部分。解决方案中使用的变量是:
那么求解对角线部分的直线方程为: 其中file在这里代表一行,rank代表一列。为帮助我们理解对角线而提供的图像是:
该解决方案的工作原理如下:文件(行)编号 1 以蓝色突出显示。rank(column) 1 以红色突出显示。解决方案从下到上,从左到右。
我想计算 file(row)=4 和 rank(column)=6 的正方形的 up 和 down 函数值(以黄色突出显示)。
所以,
向上 = 等级 - 文件 = 6 - 4 = 2
下降 = 等级 + 文件 = 6 + 4 = 10
如上图所示,上对角线确实在点 2 处切割 y 截距的左边缘。但下对角线在点 9(而不是 10)处切割 y 截距。有 1 的差异。这个差异适用于所有正方形。我想知道在这种情况下我缺少什么?为什么在向下箭头的情况下(而不是在向上箭头的情况下)总是存在差异?